小编典典

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

all

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

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

哪里getError()简单:

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

然而我最终得到了这个错误:

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

这是什么意思?这不就是读书吗?


阅读 81

收藏
2022-03-14

共1个答案

小编典典

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

但是,您遇到的真正问题是您根本不使用empty(),错误地认为“空”值与“假”有任何不同。

Empty 只是!isset($thing) || !$thing. 当您检查的东西始终存在时(在 PHP 中函数调用的结果始终存在),该empty()函数只不过是一个否定运算符

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

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

和这个:

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

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

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

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

逻辑上等价于:

if ($r->getError())
2022-03-14