在处理潜在的未定义变量时,在 PHP 中使用引用赋值是不好的做法吗?
Posted
技术标签:
【中文标题】在处理潜在的未定义变量时,在 PHP 中使用引用赋值是不好的做法吗?【英文标题】:Is it bad practice to use reference assignment in PHP when handling potentially undefined variables? 【发布时间】:2012-04-22 03:27:02 【问题描述】:我一直在考虑使用引用赋值作为处理潜在未定义变量的捷径。
换句话说,而不是:
$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'] 被定义,因为如果它不存在,它将自动创建并设置为 NULL。
这种策略是否令人不悦?
【问题讨论】:
我会说这是不好的做法。无论参考运算符如何,我都希望第二种形式发出通知,并且应尽可能压缩通知。 对,除了第二种形式不会引发通知! PHP 引用赋值就是这么棘手。 在第一部分,你为什么不考虑使用@
运算符来故意抑制错误通知?
谢谢@Matt,哎呀!那将是不使用它的另一个原因 - 即使它包含错误也不会发出通知。
不接受任何答案,马特?
【参考方案1】:
如果你只是想测试一个变量是否设置并且不为空,那么你最好测试一下:
if (! empty($this->blah['something']['else'])) ...
这样可以避免创建对一个甚至不存在的值的两个引用。
在我看来,每次创建对相同值的新引用时,您的代码都会变得难以一目了然。
如果你需要零作为非空,那么你最好创建一个像这样的全局函数:
function eempty(& $var)
return empty($var) && $var !== 0;
【讨论】:
您提出了一些观点,但您的第一个示例不正确...我相信在未声明的变量上调用 empty() 会引发警告。 如 PHP 文档中所述:“empty() 与 (boolean) var 相反,但未设置变量时不会生成警告”。见php.net/manual/en/function.empty.php【参考方案2】:我个人认为它可能更传统,但分配这样的引用值对我来说似乎有点多余。在您的情况下,我会坚持使用更常用的三元运算符。通常它更容易理解。当然,你应该尽可能地遵循你的个人语义。
【讨论】:
以上是关于在处理潜在的未定义变量时,在 PHP 中使用引用赋值是不好的做法吗?的主要内容,如果未能解决你的问题,请参考以下文章