Быстрые спецификации:
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, когда ключ не был найден, но генерирует исключение (потому что я все-таки обращался к неизвестному атрибуту).
Но, возможно, это не то, что вы хотите сделать, я просто хотел поделиться этим.