我认为下面的代码应该可以工作,但它没有(编辑:现在适用于PHP 5.5+):
if (!empty($r->getError()))
Run Code Online (Sandbox Code Playgroud)
其中getError()无非是:
public function getError()
{
return $this->error;
}
Run Code Online (Sandbox Code Playgroud)
但我最终得到了这个错误:
不能在写上下文中使用方法返回值
这是什么意思?这不仅仅是一个阅读?
Kor*_*nel 763
empty() 需要通过引用访问该值(以便检查该引用是否指向存在的内容),并且5.5之前的PHP不支持对从函数返回的临时值的引用.
然而,你遇到的真正问题是你完全使用empty(),错误地认为"空"值与"假"有任何不同.
空只是一个别名!isset($thing) || !$thing.当你检查的东西总是存在时(在函数调用的PHP结果中总是存在),该empty()函数只是一个否定运算符.
PHP 没有空洞的概念.求值为false的值为空,求值为true的值为非空值.这是同一件事.这段代码:
$x = something();
if (empty($x)) …
Run Code Online (Sandbox Code Playgroud)
还有这个:
$x = something();
if (!$x) …
Run Code Online (Sandbox Code Playgroud)
已经总是相同的结果,在所有的情况下,对于所有的数据类型(因为$x被定义empty()为冗余的).
方法的返回值始终存在(即使您没有return语句,返回值存在且包含null).因此:
if (!empty($r->getError()))
Run Code Online (Sandbox Code Playgroud)
在逻辑上等同于:
if ($r->getError())
Run Code Online (Sandbox Code Playgroud)
Pet*_*ley 330
注意:这是一个非常高的投票答案,具有很高的知名度,但请注意,它会促进不良的,不必要的编码实践!请参阅@ Kornel的答案,了解正确的方法.
注意#2:我赞同使用@Kornel答案的建议.当我三年前写这个答案时,我只是想解释错误的本质,而不一定认可另一种选择.不建议使用下面的代码段.
这是5.5以下PHP版本中empty()的限制.
注意:empty()仅检查变量,因为其他任何内容都会导致解析错误.换句话说,以下内容不起作用:empty(trim($ name)).
你必须改变这个
// Not recommended, just illustrates the issue
$err = $r->getError();
if (!empty($err))
Run Code Online (Sandbox Code Playgroud)
小智 19
我通常创建一个名为is_empty()的全局函数来解决这个问题
function is_empty($var)
{
return empty($var);
}
Run Code Online (Sandbox Code Playgroud)
然后我通常使用empty()的任何地方我只使用is_empty()