5

我一直在考虑使用引用赋值作为处理潜在未定义变量的捷径。

换句话说,而不是:

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

我可以这样做:

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

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

这种策略是否受到反对?

4

2 回答 2

0

我个人认为它可能更传统,但分配这样的引用值对我来说似乎有点多余。在您的情况下,我会坚持使用更常用的三元运算符。通常它更容易理解。当然,您应该尽可能地遵循您的个人语义。

于 2012-04-09T19:46:23.967 回答
0

如果您只想测试是否设置了变量而不是 null,那么您最好测试:

if (! empty($this->blah['something']['else'])) {...}

通过这种方式,您可以避免创建对一个甚至不存在的值的两个引用。

在我看来,每次创建对相同值的新引用时,您的代码都会变得难以一目了然。

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

function eempty(& $var) {
  return empty($var) && $var !== 0;
}
于 2012-04-09T20:28:40.947 回答