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


Answers

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

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

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

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

你必须改变这一点

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

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

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

getError()简单来说就是:

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

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

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

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




我通常会创建一个叫做is_empty()的全局函数来解决这个问题

function is_empty($var)
{ 
 return empty($var);
}

然后,我通常会使用empty()我只是使用is_empty()




问题是这个,你想知道错误是不是空的。

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();
}




Tags