-5

为什么我得到这个错误?如何修复它?在服务器上运行时出现致命错误:方法名称必须是第 8 行的字符串

class Model extends Core_Model_Config_Data
{
    protected function Load()
    {
        $a = file_properties();  
        $x0 = $this->$a["x0"]();       line 8 error
        $x0 = $this->$a["x1"]($x0);
        $this->$a["x2"]($x0);
    }
}

请帮我。

4

2 回答 2

2

尝试这个:

protected function Load()
{
    $a = file_properties(); 

    $f = $a['x0'];
    $x0 = $this->$f();

    $f = $a['x1'];
    $x0 = $this->$f($x0);

    $f = $a['x2'];
    $this->$f($x0);
}

显然,这些值$a['x0'], $a['x1'],$a['x2']必须是字符串,并为该类保存一个有效的方法名称。

于 2013-10-27T14:24:34.280 回答
1

是的,您的代码抛出错误有多种可能的原因:

  • 是什么$a["x0"]?它是一个字符串吗?如果是这样,该方法是否存在?
  • 歧义:预处理器可能很难弄清楚你想要做什么,如果字符串值$a被用来引用一个属性,它可能是一个数组,它有一个 key "x0",而它又可能是一个 Closure 实例,还是作为方法名称的字符串?使用大括号清楚:$this->{$a["x0"]}();
  • 您绝不会检查该方法是否存在,更不用说是否可以调用它了……您的method_exists($this, $a["x0"])is_callable(array($this, $a["x0"]))检查在哪里?
  • 你的代码从一开始就有缺陷,它非常容易出错......我什至不会费心解决这个问题。我会开始重新思考我的方法来解决你在这里试图解决的任何问题,然后重新开始。
于 2013-10-27T14:21:06.733 回答