considerar esta clase:¿Cómo evita PHP recurrencia infinita aquí?
class test
{
public function __set($n, $v)
{
echo "__set() called\n";
$this->other_set($n, $v, true);
}
public function other_set($name, $value)
{
echo "other_set() called\n";
$this->$name = $value;
}
public function t()
{
$this->t = true;
}
}
estoy sobrecarga de métodos magia __set()
de PHP. Cada vez que establezco una propiedad en un objeto de la clase test
, llamará al __set()
, que a su vez llama al other_set()
.
$obj = new test;
$test->prop = 10;
/* prints the following */
__set() called
other_set() called
Pero other_set()
tiene la siguiente línea $this->$name = $value
. ¿No debería esto dar como resultado una llamada al __set()
, causando recursión infinita?
Teoricé que llamaría a __set()
solo cuando establezca cosas fuera de la clase. Pero si llama al método t()
, puede ver claramente que también pasa por __set()
.
Esto es correcto. Si alguien quiere ver los detalles de implementación, está en 'zend_object_handlers.c'. – Confluence
@Confluence: Gracias ... me preguntaba dónde lo había leído. :) No pude encontrarlo en el manual; Estaba empezando a preguntarme si me lo había imaginado. Pero todas mis pruebas lo confirmaron, así que ... – cHao
¡Esta respuesta fue TAN útil! –