【问题标题】:PHP fatal error Can't use method return value in write contextPHP致命错误不能在写上下文中使用方法返回值
【发布时间】:2012-08-21 05:18:36
【问题描述】:

我已经多次看到这个问题被问到,但我仍然感到困惑并且遇到了类似的情况。我不确定this 和我的上下文是否相同,只要我确信这是一个不同的场景,否则我可能误解了解释。 好的。这是我的场景:

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

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

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

现在,如果我这样做:

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

显然我会得到一个错误:

调用未定义的方法:getCostAmount

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

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

【问题讨论】:

  • 表示没有方法getCostAmount()$cost是什么?
  • @MihaiIorga $cost 是一个对象或其他类。
  • @BurhanKhalid 是的,我已经尝试过了,它不起作用。
  • @roko $cost 必须是一个初始化的类才能工作。

标签: php


【解决方案1】:

改变这个:

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

到..

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

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

【讨论】:

    【解决方案2】:

    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 要求您将变量传递给它而不是函数”,但似乎您没有在这里得到我的上下文,这也会返回该函数不存在。跨度>
    • 是的,现在它可以正常工作了,我也非常感谢,但我不知道你是不是太着急了,但这是在我什至不知道有多少编辑之后出现的 :) 不不是说我没有正确尝试过,因为当我上次阅读它时,您只有两行代码并且没有太大意义,实际上问题中已经提到了这些内容。然而+1的解释:)
    【解决方案3】:

    尝试将isset()改为function_exists()

    【讨论】:

    • 如果这是唯一的变化,方法调用仍然存在,错误消息将保持不变;此外,function_exists() 用于 方法 而不是普通函数时,将无法正常工作。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-10-12
      • 2016-08-12
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 2012-11-28
      相关资源
      最近更新 更多