通过__get()通过引用返回null

Dan*_*ugg 5 php null reference magic-methods

快速规格:

PHP 5.3
error_reporting(-1) // the highest
Run Code Online (Sandbox Code Playgroud)

我正在使用__get()引用技巧来神奇地访问对象中任意深度的数组元素.

快速举例:

public function &__get($key){
    return isset($this->_data[$key])
        ? $this->_data[$key]
        : null;
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为$key没有设置,它试图null通过引用返回,当然抛出Only variable references should be returned by reference ...我尝试修改它如下:

public function &__get($key){
    $null = null;
    return isset($this->_data[$key])
        ? $this->_data[$key]
        : $null;
}
Run Code Online (Sandbox Code Playgroud)

仍然没有工作,虽然,我假设设置$nullnull实质上unset()这样.

我能做什么?谢谢!


刚想我会推广这个问题,因为它有点相关(PHP魔术和参考); __callStatic(),call_user_func_array(),引用和PHP 5.3.1.我还没有找到答案...除了修改PHP核心.

web*_*ave 19

这与null三元运算符无关,而是三元运算符:

用一个if/else不会重写通知:

public function &__get($key)
{
    $null = null;
    if (isset($this->_data[$key])) {
        return $this->_data[$key];
    } else {
        return $null;
    }
}
Run Code Online (Sandbox Code Playgroud)

三元运算符不能产生引用.他们只能返回.

  • +1对于特定问题和教育的解决方案. (3认同)
  • 在那里编辑的令人敬畏的信息**webbiedave**; 关于三元运营商并不知道.肯定会把它归于记忆.希望我能**+ 2**. (2认同)