PHP致命错误Can';t在写入上下文中使用方法返回值


PHP fatal error Can't use method return value in write context

我看到这个问题被问了很多次,但我还是很困惑,遇到了类似的情况。我不确定这和我的背景是否相同,只要我确信这是一个不同的场景,否则我可能误解了解释。好的,这是我的场景:

$amount = isset($cost->getCostAmount()) ? $cost->getCostAmount() : 0;

函数costAmount()是在运行时动态添加的,它可能存在也可能不存在。所以我需要首先检查我的函数是否存在,其余的都很清楚。但现在在这种情况下,我得到了一个致命的错误:

致命错误:无法在…中的写入上下文中使用方法返回值/file.php

现在,如果我做这样的事情:

$amount = $cost->getCostAmount() ? $cost->getCostAmount() : 0;

显然我会得到一个错误:

调用未定义的方法:getCostAmount

如果函数不存在。对此有什么可能的解决方案?解释会被认为是有帮助的。

请求:请对该问题被否决的原因添加充分的评论,以便我将来能够改进我的问题。

更改此项:

$amount = isset($cost->getCostAmount()) ? $cost->getCostAmount() : 0;

至。。

$amount = method_exists($cost, 'getCostAmount') ? $cost->getCostAmount() : 0;

因为这段代码isset($cost->getCostAmount())正在执行方法getCostAmount,即使它不存在

isset需要向其传递一个变量,而不是函数。它不能检查是否设置了返回值

你应该这样使用它,

$cost_amount = $cost->getCostAmount();
$amount = isset($cost_amount) ? $cost_amount : 0;

即使是这个代码也没有意义。因为这里将始终设置$cost_amount。如果getCostAmount返回nullempty字符串,则应该以这种方式进行检查。

$cost_amount = $cost->getCostAmount();
$amount = !is_null($cost_amount) ? $cost_amount : 0;

此外,您的代码找不到getCostAmount函数。如果你知道这是在某个地方声明的,那么就包括它。如果这个方法是动态生成的,你可以使用method_exists进行检查。

 $amount = method_exists($cost, 'getCostAmount')? $cost->getCostAmount(): 0;

尝试将isset()更改为function_exists()

您可以使用:method_exists(http://www.php.net/manual/en/function.method-exists.php)以以下方式:

var_dump(method_exists($cost,'getCostAmount'));