我看到这个问题被问了很多次,但我还是很困惑,遇到了类似的情况。我不确定这和我的背景是否相同,只要我确信这是一个不同的场景,否则我可能误解了解释。好的,这是我的场景:
$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
返回null
或empty
字符串,则应该以这种方式进行检查。
$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'));