El único beneficio de __get()
es la posibilidad de menos código, pero incluso así no es necesariamente el caso. Por ejemplo, si tiene un conjunto de 10 miembros privados y desea que el captador revele 5, debe escribir __get()
para que, si se llama a uno de los miembros visibles a psuedo, lo envíe. De lo contrario, o bien emite un error (que de otra manera llegará de forma natural y sin __get()
o devolver un valor como null
que en realidad no puede ser de ayuda.
debo excoriate cualquiera que sugiere el uso de captadores y definidores en general a todos. Por lo general, indica un problema con la arquitectura explicar la diferencia conceptual entre las dos siguientes bloques de código, por ejemplo:.
class _ {
public $_;
}
vs
class _ {
private $_;
public function get_() {
return $this->_;
}
}
no hay una difere nce.
Sin embargo, como muchos señalarán, la ventaja de tener un getter es que esto le permite modificar el valor de retorno de alguna manera transparente para que sea útil para el destinatario. Sin embargo, volvemos a los problemas de arquitectura. Nunca deberías tener que exponer el contenido de una clase por ningún motivo. En cambio, debe decirle a la clase que realice una acción (que puede variar según su estado). El uso de getters generalmente permite consultar el estado de la clase y realizar una acción externamente en función del estado visualizado.
que tienen esencialmente los mismos argumentos contra __set()
y definidores, pero no es una cosa agradable que le permite hacer __set()
:
class _ {
private $_ = array();
public function __set($key, $val) {
$this->_[$key] = $val;
}
}
Esto le permite escribir el $_obj->key = 'val'
muy agradable. Tenga en cuenta que no hay mucha diferencia con esto y agrega otro método como add()
que toma la clave y el valor y hace lo mismo, prefiero la notación del generador de objetos.
Hay momentos en que lo he encontrado conveniente, pero dejaré que otros contesten por otros motivos. Sin embargo, señalaré que usar __get/__ set es mucho más lento ... aproximadamente 10 veces más. No sé por qué y no lo he comparado, pero está documentado en el sitio de PHP. – Brad
Consulte http://programmers.stackexchange.com/questions/62383/what-is-the-point-of-properties para obtener un "¿Por qué propiedades más general?" pregunta. – delnan