2013-10-27 91 views
-4

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

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

那么'$ x0 = $ this - > $ a [“x0”]();'应该是什么? –

+0

var_dump($ this - > $ a [“x0”])的结果是什么? – zzlalani

+0

@Hanky웃Panky是的你是对的 – zzlalani

回答

1

权,还有各种各样的为您的代码抛出了错误的可能原因:

  • 什么是$a["x0"]?这是一个字符串吗?如果是这样,该方法是否存在?
  • 歧义:如果字符串值$a被用于引用属性,该属性可能是一个数组,其中包含键"x0",则预处理器可能很难确定要执行的操作可能是一个Closure实例,或者是一个方法名称的字符串?使用大括号要清楚:$this->{$a["x0"]}();
  • 如果方法存在,你就不知道如果可以调用它,更不用说了...更何况你的method_exists($this, $a["x0"])is_callable(array($this, $a["x0"]))检查在哪里?
  • 你的代码有缺陷,它非常容易出错......我甚至不打算完成这一项。我开始着手重新思考我想要解决的任何问题,并重新开始。
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']必须是字符串以及类持有有效的方法名。

+0

是不是固定错误$ x0 = $ this - > $ f();我的PHP版本是5.2.17 – user699998

+0

请更好地阅读我的答案:**显然,值'$ a ['x0']','$ a ['x1']','$ a ['x2']'必须是字符串并为该类保存一个有效的方法名称。**它们是什么实际值? –

相关问题