Это позволяет создать новое свойство объекта. Но кто-то может объяснить с помощью вспомогательных ссылок, почему setAttrib
ведет себя по-разному? Почему это не вызывает ... ожидание этого ... переполнение стека !! ??
class Test
{
public function setAttrib( $key, $value ) {
echo "setAttrib\n";
// first time: calls $this->__set($key, $value)
// second time: just sets a public property (but, when exactly was it created?)
$this->$key = $value;
}
public function __set( $key, $value ) {
echo "__set\n";
$this->setAttrib($key, $value);
}
}
$test = new Test();
$test->setAttrib('hey', 'It works');
var_dump($test);
производит ...
setAttrib
__set
setAttrib
object(Test)#1 (1) {
["hey"]=>
string(8) "It works"
}
Редактировать: я не ищу альтернативу. Я ищу причину, по которой это работает.