さて、私はかなりイライラしています。つまり、この問題が解決されたと思った、または以前にこれを正常に達成したことがあるからです。
簡単な準備:
- PHP5.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;
}