<?php
class Magic
{
private $vars;
public function __get($name)
{
return $this->get($name);
}
public function __set($name, &$value) {
$this->set($name, $value);
}
public function get($name) {
return $this->vars[$name]();
}
public function set($name, &$value) {
$this->vars[$name] = $value;
}
}
$magic = new Magic();
$magic->a = function () use($magic) {
var_dump('func a');
return $magic->b;
};
$magic->b = function () use ($magic) {
var_dump('func b');
return $magic->a; // Почему тут не может найти свойство, оно ЕСТЬ смотри строку 22 (Notice)
};
$magic->a; // Должна быть бесконечный вызов функций (на уровне вложенности 10 по умолчанию должна быть ошибка)
// А вот тут тоже самое но без использования магии и ведет себя как надо(Fatal Error)
$magic->set('a', function () use($magic) {
$magic->get('b');
});
$magic->set('b', function () use($magic) {
$magic->get('a');
});
$magic->get('a');
Fatal error: Method Magic::__set() cannot take arguments by reference in /in/b4cXk on line 11
Process exited with code 255.
Output for 5.1.0 - 5.1.6, 5.2.0 - 5.2.4
Parse error: syntax error, unexpected T_FUNCTION in /in/b4cXk on line 22
Process exited with code 255.
Output for 5.0.0 - 5.0.5
Parse error: parse error, unexpected T_FUNCTION in /in/b4cXk on line 22
Process exited with code 255.
Output for 4.4.2 - 4.4.9
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/b4cXk on line 4
Process exited with code 255.
Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/b4cXk on line 4
Process exited with code 255.
Output for 4.3.2 - 4.3.4
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in /in/b4cXk on line 4
Process exited with code 255.