Я думаю, это довольно простой вопрос, но я не уверен.
У меня есть класс:
<?PHP
class PropertyTest {
private $data = array();
public function __set($name, $value) {
$this->data[$name] = $value;
}
public function __get($name) {
if (array_key_exists($name, $this->data)) {
return $this->data[$name];
}
$trace = debug_backtrace();
trigger_error(
'Undefined property via __get(): ' . $name .
' in ' . $trace[0]['file'] .
' on line ' . $trace[0]['line'],
E_USER_NOTICE);
return null;
}
public function __isset($name) {
echo "Is '$name' set?\n";
return isset($this->data[$name]);
}
public function __unset($name) {
echo "Unsetting '$name'\n";
unset($this->data[$name]);
}
public function getHidden() {
return $this->hidden;
}
}
?>
Не знаю, почему, но блок 'code' в любом случае раздражает, как ад.
Просто базовая магия действительно установлена.Но когда я изменяю __get
на передачу по ссылке, я больше не могу это делать:
$object->$variableName = $variableValue;
Я не уверен почему, хотя я предполагаю, потому что он проверяет, существует ли он, но так как он должен что-то вернутьссылаться на это не удастся, если его не существует с самого начала.Функция set не будет вызвана, вероятно, и даже если я верну ложное значение, она никогда не вызовет функцию set, потому что она «уже существует / имеет значение».
Правильно ли я понимаю?Если так, есть ли обход?Если нет, то как это работает и есть ли обходной путь?