我认为下面的代码应该工作,但它没有(编辑:现在工作在PHP 5.5+):
if (!empty($r->getError()))
其中getError()是简单的:
public function getError()
{
return $this->error;
}
然而,我最终得到了这个错误:
不能在写上下文中使用方法返回值
这是什么意思?这难道不只是一次阅读吗?
我认为下面的代码应该工作,但它没有(编辑:现在工作在PHP 5.5+):
if (!empty($r->getError()))
其中getError()是简单的:
public function getError()
{
return $this->error;
}
然而,我最终得到了这个错误:
不能在写上下文中使用方法返回值
这是什么意思?这难道不只是一次阅读吗?
当前回答
我通常创建一个名为is_empty()的全局函数来解决这个问题
function is_empty($var)
{
return empty($var);
}
然后在任何我通常使用empty()的地方,我只使用is_empty()
其他回答
在PHP 5.5之前,PHP文档经常说:
Empty()只检查变量,否则将导致解析错误
在PHP < 5.5中,你不能直接在函数的返回值上使用empty()。相反,您可以将getError()的返回值赋值给一个变量,并在该变量上运行empty()。
在PHP >= 5.5中,这不再是必要的。
检查数组是否为空的另一种方法是:
count($array)>0
对我来说没有错误
注意:这是一个非常高的投票和能见度的答案,但请注意,它促进了糟糕的,不必要的编码实践!请参阅@Kornel的答案以了解正确方法。 注2:我支持使用@Kornel的答案。当我三年前写下这个答案时,我只是想解释这个错误的本质,并不一定赞同另一种选择。不建议使用下面的代码片段。
这是PHP 5.5以下版本中empty()的限制。
注意:empty()只检查变量as 任何其他操作都将导致解析 错误。换句话说,就是 将不工作:empty(trim($name))。
你得换这个
// Not recommended, just illustrates the issue
$err = $r->getError();
if (!empty($err))
问题是,你想知道错误是否为空。
public function getError() {
return $this->error;
}
添加一个方法isErrorSet()将解决这个问题。
public function isErrorSet() {
if (isset($this->error) && !empty($this->error)) {
return true;
} else {
return false;
}
}
现在,这将很好地工作与这段代码没有通知。
if (!($x->isErrorSet())) {
echo $x->getError();
}
正如其他人指出的那样,这是empty()的(奇怪的)限制。
对于大多数目的,这样做等同于调用empty,但这是有效的:
if ($r->getError() != '')