Cita: Claro, es discutible por las razones que vos decis...
Ahora, prefiero hacer varios métodos del estilo "crearUsuarioEnBlanco()", "crearUsuarioConTodosLosDatos($x, $y, $z...)", "crearUsuarioIdYClave($x, $y)" que llamen al consructor, haga sets de la información extra y devuelva un Usuario, antes que emular el comportamiento de un constructor en Java, con func_get_args().
Mmmm... por qué tan rebuscado? El mejor diseño es el más simple (y es escalable

)
Crea un solo constructor simple y luego asigna los valores por "set". Si tus aplicaciones necesitan que les devuelvas los objetos de tipo "Usuario" ya cargados, crea entonces una
"Fabrica de Usuarios" (una clase aparte o un método dentro de la clase Usuarios que se llame "factory") y que reciba valores dinámicos por un parámetro objeto o un array, y posteriormente le devuelves la instancia ya cargada (que hiciste internamente con un constructor simple y asignando con set).
Es un camino ampliamente recorrido y seguro, para que vamos a caminar por el precipicio innecesariamente?
Cita: Aunque creo que ahora que está disponible Type Hinting, se podría implementar...
No entendí esta parte, por qué lo dices?