2013-10-27 114 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']'必須是字符串併爲該類保存一個有效的方法名稱。**它們是什麼實際值? –

相關問題