Быстрые спецификации:
PHP 5.3 error_reporting(-1) // the highest
Я использую __get() путем обращения к магическому доступу к произвольно глубоким элементам массива в объекте.
Быстрый пример:
public function &__get($key){ return isset($this->_data[$key]) ? $this->_data[$key] : null; }
Это не работает, когда $key не задан, он пытается вернуть значение null по ссылке, что, конечно, бросает. Only variable references should be returned by reference ... Я попытался изменить его следующим образом:
public function &__get($key){ $null = null; return isset($this->_data[$key]) ? $this->_data[$key] : $null; }
Тем не менее, все еще не работает, я предполагаю, что установка $null в null существу не unset() s это.
Что я могу сделать? Благодаря!
Просто подумал, что я бы продвинул этот вопрос, поскольку он несколько уместен ( магия PHP и ссылки ); __callStatic (), call_user_func_array (), ссылки и PHP 5.3.1 . Я еще не нашел ответа … помимо изменения ядра PHP.
Это не имеет ничего общего с null , а скорее тернарным оператором:
Перезапись его с помощью if/else не будет выдавать уведомление:
public function &__get($key) { $null = null; if (isset($this->_data[$key])) { return $this->_data[$key]; } else { return $null; } }
Тернарные операторы не могут приводить к ссылкам. Они могут возвращать только значения .
Зачем возвращать null явно? Если $key не существует в $this->_data он все равно вернет NULL ?
Я рекомендую использовать следующее и настроить свою логику на другом конце. Вероятно, вы уже сейчас проверяете значение null . Вы можете изменить его на empty() или какой-либо другой вариант. Или используйте исключения, предложенные Маттье .
public function &__get($key){ return $this->_data[$key]; }
У меня была эта проблема, но я понял, что не должен возвращать null, когда ключ не был найден, но генерирует исключение (потому что я все-таки обращался к неизвестному атрибуту).
Но, возможно, это не то, что вы хотите сделать, я просто хотел поделиться этим.