php致命错误:方法名称必须是字符串

时间:2013-10-27 14:14:27

标签: php

为什么我会收到此错误?如何解决?当在服务器上运行时发生致命错误:方法名称必须是字符串第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);
    }
}

请帮帮我。

2 个答案:

答案 0 :(得分: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']必须是字符串,并为该类保留有效的方法名称。

答案 1 :(得分:1)

是的,您的代码出现错误的原因有多种:

  • 什么是$a["x0"]?它是一个字符串?如果是这样,该方法是否存在?
  • 歧义:如果$a的字符串值用于引用可能是数组的属性"x0",那么预处理器可能很难计算出您要执行的操作。 {1}},它可能是一个Closure实例,还是一个方法名称的字符串?使用粗糙的括号清楚:$this->{$a["x0"]}();
  • 如果方法存在,你决不是在唠叨,更不用说如果它可以被调用了......你的method_exists($this, $a["x0"])is_callable(array($this, $a["x0"]))检查在哪里?
  • 你的代码是有缺陷的,这是非常容易出错的...我甚至不打扰这个工作。我打算重新思考一下你在这里要解决的问题,然后重新开始。