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

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

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

getError()简单来说就是:

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

然而我最终发现了这个错误:

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

这是什么意思? 这不仅仅是一个阅读?


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

然而,你真正的问题是你完全使用empty() ,错误地认为“空”的价值与“假”的任何不同。

Empty只是!isset($thing) || !$thing的别名 !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())

注意:这是一个非常高的投票答案,具有很高的知名度,但请注意,它会促进糟糕的不必要的编码实践! 请参阅@ Kornel的正确答案。

注#2:我赞同使用@Kornel答案的建议。 当我三年前写这个答案时,我只是想解释错误的性质,并不一定赞同这个选择。 不推荐下面的代码片段。


这是PHP版本低于5.5的空()的限制。

注意:empty()只检查变量,否则会导致分析错误。 换句话说,以下内容不起作用:空(trim($ name))。

你必须改变这一点

// Not recommended, just illustrates the issue
$err = $r->getError();
if (!empty($err))

根据PHP文档:

empty()只检查变量,否则会导致分析错误

你不能直接在函数的返回值上使用empty() 。 相反,将getError()的返回值设置为一个变量,并在变量上运行empty()

链接地址: http://www.djcxy.com/p/10017.html

上一篇: Can't use method return value in write context

下一篇: iPhone iOS: how to detect when in roaming? (Not for jailbreaked phones)