-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あいまいさ: の文字列値がプロパティを参照するために使用された場合、プリプロセッサはあなたがしようとしていることを理解するのに苦労するかも"x0"しれません. 、またはメソッド名である文字列? 明確にするために残酷な中括弧を使用してください:$this->{$a["x0"]}();
  • メソッドが存在するかどうかを確認することはありません。それを呼び出すことができるかどうかは言うまでもありません...あなたmethod_exists($this, $a["x0"])is_callable(array($this, $a["x0"]))チェックはどこにありますか?
  • あなたのコードには最初から欠陥があり、信じられないほどエラーが発生しやすいです...私はこれを解決することさえ気にしません。ここで解決しようとしている問題が何であれ、私は自分のアプローチを再考し、最初からやり直します.
于 2013-10-27T14:21:06.733 に答える