Возвращает 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()
это.
Что я могу сделать? Спасибо!
Просто решил, что я буду продвигать этот вопрос, так как он несколько релевантен (PHP magic and references); __callStatic (), call_user_func_array (), references и PHP 5.3.1 . Я еще не нашел ответа ...помимо модификации ядра PHP.
3 ответа:
Это не имеет ничего общего с
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]; }