在写入上下文中不能使用方法返回值
我会认为下面的一段代码应该可以工作,但不会(编辑:现在在PHP 5.5+中工作) :
if (!empty($r->getError()))   getError()简单来说就是: 
 public function getError() { return $this->error; } 
但是,我最终得到这个错误:
在写入上下文中不能使用方法返回值
这是什么意思? 这不只是一个读取?
  empty()需要通过引用来访问这个值(为了检查这个引用是否指向了某个存在的东西),而5.5之前的PHP不支持对从函数返回的临时值的引用。 
 然而,你真正的问题是你使用empty() ,错误地认为“空”的价值是任何不同于“假”。 
 空只是!isset($thing) || !$thing的别名  !isset($thing) || !$thing 。 当你检查的东西总是存在的时候(在PHP中,函数调用的结果总是存在的), empty()函数不过是一个否定运算符 。 
PHP 没有空白的概念 。 评估为false的值为空,评估为true的值非空。 这是同一件事。 此代码:
 $x = something(); if (empty($x)) … 
和这个:
 $x = something(); if (!$x) … 
  在所有情况下,对于所有的数据types,总是有相同的结果 (因为$x被定义为empty()是多余的)。 
 方法的返回值总是存在的(即使你没有return语句,返回值也是存在的,并且包含null )。 因此: 
 if (!empty($r->getError())) 
在逻辑上相当于:
 if ($r->getError()) 
注意:这是一个非常高的投票答案,具有很高的知名度,但请注意,它会促进糟糕的,不必要的编码实践! 请参阅@ Kornel的正确答案 。
注#2:我赞同使用@Kornel答案的build议。 当我三年前写这个答案的时候,我只是想解释错误的本质,不一定是赞同的。 下面的代码片段是不推荐的。
这是PHP版本低于5.5的空()的限制。
注意:empty()只检查variables,否则会导致分析错误。 换句话说,以下内容将不起作用:empty(trim($ name))。
你必须改变这一点
 // Not recommended, just illustrates the issue $err = $r->getError(); if (!empty($err)) 
根据PHP文档 :
empty()只检查variables,否则会导致parsing错误
 你不能直接在函数的返回值上使用empty() 。 相反,将getError()的返回值设置为一个variables,并在variables上运行empty() 。 
我通常创build一个叫做is_empty()的全局函数来解决这个问题
 function is_empty($var) { return empty($var); } 
然后,我通常会使用空()我只是使用is_empty()
正如其他人指出的那样,这是一个(怪异的)空()的限制。
对于大多数的紫癜,这样做是相等的空调,但这是有效的:
 if ($r->getError() != '') 
问题是这个,你想知道错误是不是空的。
 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(); } 
检查一个数组是否为空的替代方法可能是:
 count($array)>0 
它适用于我没有这个错误