我认为下面的代码应该可以工作,但它不是 (Edited: Now works in PHP 5.5+) :
if (!empty($r->getError()))
getError() 的简单地说:
getError()
public function getError() { return $this->error; }
但我最终得到了这个错误:
在写上下文中不能使用方法返回值
这是什么意思?这不仅仅是一个阅读?
empty() 需要通过引用访问该值(以便检查该引用是否指向存在的内容),并且5.5之前的PHP不支持对从函数返回的临时值的引用 .
empty()
但是,你遇到的真正问题是你完全使用 empty() ,错误地认为"empty"值与"false"有任何不同 .
Empty只是 !isset($thing) || !$thing 的别名 . 当你检查的东西总是存在时(在函数调用的PHP结果中总是存在), empty() 函数只不过是一个否定运算符 .
!isset($thing) || !$thing
PHP doesn't have concept of emptyness . 求值为false的值为空,求值为true的值为非空值 . 这是同一件事 . 这段代码:
$x = something(); if (empty($x)) …
还有这个:
$x = something(); if (!$x) …
有 always the same result, in all cases, for all datatypes (因为 $x 被定义 empty() 是多余的) .
$x
方法的返回值始终存在(即使您没有 return 语句,返回值存在且包含 null ) . 因此:
return
null
在逻辑上等同于:
if ($r->getError())
注意:这是一个非常高的投票答案,具有很高的知名度,但请注意,它会促进不良的,不必要的编码实践!请参阅@ Kornel的答案,了解正确的方法 . 注意#2:我赞同使用@Kornel答案的建议 . 当我三年前写这个答案时,我只是想解释错误的本质,而不一定支持替代方案 . 不建议使用下面的代码段 .
在低于5.5的PHP版本中,这是empty()的限制 .
注意:empty()仅检查变量,因为其他任何内容都会导致解析错误 . 换句话说,以下内容不起作用:empty(trim($ name)) .
你必须改变这个
// Not recommended, just illustrates the issue $err = $r->getError(); if (!empty($err))
根据the PHP docs:
empty()仅检查变量,因为其他任何内容都会导致解析错误
您不能直接在函数的返回值上使用 empty() . 而是将 getError() 的返回值设置为变量并在变量上运行 empty() .
我通常创建一个名为is_empty()的全局函数来解决这个问题
function is_empty($var) { return empty($var); }
然后我通常使用empty()的任何地方我只使用is_empty()
正如其他人所指出的,它是empty()的一个(奇怪的)限制 .
对于大多数的purproses,这样做就像调用empty一样,但是这样可行:
if ($r->getError() != '')
问题是这样,你想知道错误是否为空 .
添加方法isErrorSet()将解决问题 .
public function isErrorSet() { if (isset($this->error) && !empty($this->error)) { return true; } else { return false; } }
现在这可以正常使用此代码,而不会发生任何通知 .
if (!($x->isErrorSet())) { echo $x->getError(); }
检查数组是否为空的另一种方法是:
count($array)>0
没有那个错误,它对我有用
7 回答
empty()
需要通过引用访问该值(以便检查该引用是否指向存在的内容),并且5.5之前的PHP不支持对从函数返回的临时值的引用 .但是,你遇到的真正问题是你完全使用
empty()
,错误地认为"empty"值与"false"有任何不同 .Empty只是
!isset($thing) || !$thing
的别名 . 当你检查的东西总是存在时(在函数调用的PHP结果中总是存在),empty()
函数只不过是一个否定运算符 .PHP doesn't have concept of emptyness . 求值为false的值为空,求值为true的值为非空值 . 这是同一件事 . 这段代码:
还有这个:
有 always the same result, in all cases, for all datatypes (因为
$x
被定义empty()
是多余的) .方法的返回值始终存在(即使您没有
return
语句,返回值存在且包含null
) . 因此:在逻辑上等同于:
在低于5.5的PHP版本中,这是empty()的限制 .
你必须改变这个
根据the PHP docs:
您不能直接在函数的返回值上使用
empty()
. 而是将getError()
的返回值设置为变量并在变量上运行empty()
.我通常创建一个名为is_empty()的全局函数来解决这个问题
然后我通常使用empty()的任何地方我只使用is_empty()
正如其他人所指出的,它是empty()的一个(奇怪的)限制 .
对于大多数的purproses,这样做就像调用empty一样,但是这样可行:
问题是这样,你想知道错误是否为空 .
添加方法isErrorSet()将解决问题 .
现在这可以正常使用此代码,而不会发生任何通知 .
检查数组是否为空的另一种方法是:
没有那个错误,它对我有用