Возвращает 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]; }