& __ get()问题再次出现.重大挫败感即将到来 [英] &__get() issues, again. Major frustration is afoot
问题描述
好的,我感到非常沮丧,这是因为我以为自己已经解决了这个问题,或者之前已经成功完成了这项工作.
Alrighty, I'm getting quite frustrated, namely because I thought I had this issue solved, or had accomplished this successfully before.
快速入门:
- PHP 5.3.6.
- 错误报告更改为11(实际上是
-1
;将来很安全,所有错误/通知)
- PHP 5.3.6.
- Error reporting cranked to 11. (
-1
actually; future safe, all errors/notices)
我有一个类,它汇总了请求参数.对于傻笑,这里是精简版:
I have a class, it aggregates request parameters. For giggles here is a stripped down version:
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
不存在,我总是会出错.我已经尝试过:
Anyways, the reason for arrg!
is, no matter what I try, I always get an error whenever the $key
doesn't exist. I've tried:
// doesn't work
$null = null;
if(isset($this->_data[$key])){ return $this->_data[$key]; }
return $null;
// doesn't work
return $this->_data[$key];
有人告诉我三元运算符不能得出一个引用,因此,当然不会起作用,但是我们知道从if
条件尝试仍然可以.发生什么情况,例如:
I've been told ternary operators cannot result in a reference, ergo, that of course doesn't work, but we know that from the if
condition attempt anyways. What happens, for example:
// 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'];
我在这里迷失了方向;也许我幻想了一个实现这一目标的场景.不可能(不发出通知)成功做到这一点吗?
I'm losing my mind here; perhaps I hallucinated a scenario where I achieved this. Is it not possible to (without throwing a notice) successfully do this?
说明:我尝试过的事情
上述内容:
// 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;
}
推荐答案
echo $myRequest->params['baz'];
__get
函数中的isset检查将从$this->_data
查找"params"
并返回数组.您得到的通知是从类外部获取的,并且有关返回的数组中的键"baz"
-在您的示例中从未真正定义过.
The isset check in your __get
function will look up "params"
from $this->_data
and return the array. The notice you get is from outside the class and about a key "baz"
in the returned array - which in your example was never actually defined.
这篇关于& __ get()问题再次出现.重大挫败感即将到来的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!