2

私は奇妙な状況に直面しており、それを理解するのを手伝ってくれるかもしれません.

$object = array('controller' => 'frontend_shop', 'method' => 'category');

include_once(PATH.'controllers/'.$object['controller'].'.php');

$controller = new $object['controller']($object);

class Frontend_shop extends Controller {

   public $controller;

   public function __construct($object)
   {

    // Works
    $this->$object['method']();

    //Don´t work
    $this->controller = $object;
    $this->controller['method']();

    }

   public function category()
   {
       echo 'hello';
   }
}

これは機能し、「こんにちは」が表示されます

    $this->$object['method']();

しかし、この配列を次のようなクラス変数に割り当てると:

    $this->controller = $object;
    $this->controller['method']();

私は得る:

Fatal error: Call to undefined function category() in /usr/lib/app/application/controllers/frontend_shop.php on line 10

もちろん、最初の方法を使用できることは知っていますが、クラス変数の方法で間違っている可能性があることを説明できるかもしれません。ありがとう

4

1 に答える 1

3

次のようなものが必要です

$this->{$this->controller['method']}();

$this->controller['method']文字列 (メソッド名) に解決されます。ただし、メソッドはオブジェクトに対して呼び出す必要があり (そうでない場合は、メソッドではなく関数です)、それが他の$this->解決策の出番です。

私は好む

$callable = array($this, $this->controller['method']);
call_user_func($callable);

実際に何が起こっているのかを確認するには、コードをよく見る必要があるため、文字通りの呼び出し構文は好きではありません。

http://php.net/manual/en/function.call-user-func.php

http://www.php.net/manual/en/language.types.callable.php

于 2012-05-16T18:37:57.950 に答える