在处理可能未定义的变量时,在PHP中使用引用赋值是不好的做法吗?

Mat*_*ond 5 php reference variable-assignment

我一直在考虑使用引用赋值作为处理潜在未定义变量的快捷方式.

换句话说,而不是:

$foo = isset($this->blah['something']['else']) ? $this->blah['something']['else'] : null;
if (!is_null($foo) && ...){
    //do something with $foo
}
Run Code Online (Sandbox Code Playgroud)

我能做到这一点:

$foo = &$this->blah['something']['else'];
if (!is_null($foo) && ...){
    //do something with $foo
}
Run Code Online (Sandbox Code Playgroud)

看起来更简单吧?由于PHP通过引用处理赋值的方式,我不必担心定义$ this-> blah ['something'] ['else'],因为如果它不存在,它将自动创建并设置为NULL.

这种策略不受欢迎吗?

And*_*dré 0

如果您只想测试变量是否已设置且不为空,那么您最好测试:

if (! empty($this->blah['something']['else'])) {...}
Run Code Online (Sandbox Code Playgroud)

这样您就可以避免创建对甚至不存在的值的两个引用。

在我看来,每次创建对同一值的新引用时,您的代码会变得更难以一眼理解。

如果您需要零作为非空,那么您最好创建一个如下所示的全局函数:

function eempty(& $var) {
  return empty($var) && $var !== 0;
}
Run Code Online (Sandbox Code Playgroud)