一尘不染

在写上下文中不能使用方法返回值

php

我认为以下代码应该可以工作,但是不能 (编辑:现在可以在PHP 5.5+中工作)

if (!empty($r->getError()))

getError()简单地在哪里:

public function getError()
{
    return $this->error;
}

但是我最终遇到了这个错误:

在写上下文中不能使用方法返回值

这是什么意思?这不只是阅读吗?


阅读 366

收藏
2020-05-26

共1个答案

一尘不染

empty() 需要通过引用访问该值(以检查该引用是否指向存在的对象),并且5.5之前的PHP不支持对从函数返回的临时值的引用。

但是,您真正的问题是,您empty()根本使用了所有内容,错误地认为“空”值与“假”有什么不同。

空只是的别名!isset($thing) || !$thing。当您要检查的事物始终存在时(在PHP中,函数调用的结果始终存在),该empty()函数 不过是一个否定运算符

PHP 没有空性的概念 。评估为false的值为空,评估为true的值非空。这是同一件事。这段代码:

$x = something();
if (empty($x)) …

和这个:

$x = something();
if (!$x) …

在所有情况下,所有数据类型都 具有 相同的结果 (因为$x定义empty()是多余的)。

方法的返回值始终存在(即使您没有return语句,返回值也存在并包含null)。因此:

if (!empty($r->getError()))

在逻辑上等效于:

if ($r->getError())
2020-05-26