Hola,
Cita:
Iniciado por andresdzphp si es privada es privada y no existe por fuera de la clase. __get intenta solucionarte eso ...
Exactamente, en la lista de propiedades públicas que expone la clase no existe la variable 'hidden' (puesto que es privada), así que usa la función mágica __get, es decir, como no lo encontró en la lista de propiedades simplemente lo resuelve como cualquier otro nombre que no existe.
Cita:
Iniciado por pateketrueke ... Ningún lenguaje inventa cosas de la nada, ningún lenguaje imputa errores de programador, ningún lenguaje hace lo que no le digamos que haga. ...
Creo que difiero un poco con ese concepto cuando hablamos de PHP, básicamente se llaman 'mágicas' porque hacen algo mágico, es decir, hacen algo que no es fácil incurrir en conclusiones exactas si no se sabe a ciencia cierta su funcionamiento. Aclaro que no digo que se invente cosas, simplemente que es difícil saberlo si no se conoce PHP profundamente.
Eso hace que el lenguaje sea hasta cierto punto más dinámico, lo cual muchos confunden con más fácil, eso desde mi punto de vista, hace el lenguaje ciertamente más dinámico pero más difícil y se presta a confusiones fácilmente, que es lo que le ha pasado a skywolker.
Sin incurrir en más detalles podría decir que PHP con el método mágico __get hace más confuso el lenguaje. ¿Que sucedería si un programador hace uso de la clase pero se le olvida que la variable se llama 'hidden' e inadvertidamente escribe en la propiedad 'hiden'?
$a->hiden = 5;
echo $a->hiden;
No se uso la variable privada hidden realmente, pero ese tipo de errores suele llevar unos cuantos minutos, sino más, de depuración. En otros lenguajes que no usa duck typing generaría un error de compilación puesto que la propiedad no existe o es 'private'.
Saludos,
ps:
Algo relacionado al tema:
Cita: One issue with duck typing is that it forces the programmer to have a much wider understanding of the code he or she is working with at any given time. In a strongly and statically typed language that uses type hierarchies and parameter type checking, it's much harder to supply an unexpected object type to a class.
http://en.wikipedia.org/wiki/Duck_typing