& __ get () снова. Основное разочарование

Хорошо, я очень расстроен, потому что я думал, что я решил эту проблему, или успешно это сделал раньше.

Быстрое предварительное:

  • PHP 5.3.6.
  • Сообщение об ошибках сработало до 11. ( -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; }