Хорошо, я очень расстроен, потому что я думал, что я решил эту проблему, или успешно это сделал раньше.
Быстрое предварительное:
-1
самом деле, в будущем безопасно, все ошибки / уведомления ) У меня есть класс, он агрегирует параметры запроса. Для хихиканья здесь урезанная версия:
class My_Request{ private $_data = array(); public function __construct(Array $params, Array $session){ $this->_data['params'] = $params; $this->_data['session'] = $session; } public function &__get($key){ // arrg! } }
В любом случае, причина для arrg!
есть, независимо от того, что я пытаюсь, я всегда получаю ошибку всякий раз, когда $key
не существует. Я пробовал:
// doesn't work $null = null; if(isset($this->_data[$key])){ return $this->_data[$key]; } return $null; // doesn't work return $this->_data[$key];
Мне сказали, что тернарные операторы не могут привести к ссылке, ergo, что, конечно, не работает, но мы знаем, что от попытки if
состояния все равно. Что происходит, например:
// params will have foo => bar, and session hello => world $myRequest = new My_Request(array('foo' => 'bar'), array('hello' => 'world')); // throws an error - Undefined index: baz echo $myRequest->params['baz'];
Я теряю рассудок здесь; возможно, я галлюцинировал сценарий, когда я достиг этого. Не удается ли ( без броска уведомления ) сделать это?
Уточнение: вещи, которые я пробовал
Вышеупомянутое:
// no check, no anything, just try returning : fails public function &__get($key){ return $this->_data[$key]; } // null variable to pass back by reference : fails public function &__get($key){ $null = null; if(isset($this->_data[$key])){ return $this->_data[$key]; } return $null; }
Другие попытки:
// can't work - can't return null by reference nor via ternary : fails public function &__get($key){ return isset($this->_data[$key]) ? $this->_data[$key] : null; }