Хорошо, я очень разочарован, а именно потому, что думал, что решил эту проблему или уже успешно ее достиг.
Быстрый предварительный просмотр:
- 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];
Мне сказали, что троичные операторы не могут привести к ссылке, следовательно, это, конечно, не работает, но мы все равно знаем это из попытки 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;
}