Возвращать null по ссылке через __get ()

Быстрые спецификации:

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

Но, возможно, это не то, что вы хотите сделать, я просто хотел поделиться этим.