1

次のようなことができるように、メソッド名でインデックス付けされたメソッドの配列をphpクラスに入れたいと思います。

public function executeMethod($methodName){
 $method=$this->methodArray[$methodName];
 $this->$method();
 // or some other way to call a method whose name is stored in variable $methodName
}

私は__callのためにこれを見つけました:

オーバーロード メソッドは、宣言されていない、または現在のスコープで表示されないプロパティまたはメソッドと対話するときに呼び出されます。

ただし、executeMethod で使用したいメソッドは表示されます。

それを行う適切な方法は何ですか?出来ますか?

編集: executeMethod でメソッド名を取得してから、指定された名前のメソッドを呼び出したいと思っていましたが、メソッド配列のアイデアがありました。

4

3 に答える 3

1

構文で文字列を使用して、オブジェクトのメソッドとプロパティを呼び出すことができます

$method = 'your_method_name_as_string';
$this->$method();

PHPドキュメントから

<?php
class Foo
{
    function Variable()
    {
        $name = 'Bar';
        $this->$name(); // This calls the Bar() method
    }

    function Bar()
    {
        echo "This is Bar";
    }
}

$foo = new Foo();
$funcname = "Variable";
$foo->$funcname();  // This calls $foo->Variable()

?>
于 2013-03-28T16:40:33.797 に答える
0

無名関数はphp 5.3で利用可能です

あなたは次のようなことをしようとしていると思います

$tmp['doo'] = function() { echo "DOO"; };
$tmp['foo'] = function() { echo "FOO"; };
$tmp['goo'] = function() { echo "GOO"; };

$tmp['doo']();
于 2013-03-28T16:44:47.763 に答える
0

多分あなたはこのようなものを探しています:

public function executeMethod($methodName) {
    if (isset($this->methodArray[$methodName])) {
        $method = $this->methodArray[$methodName];
        return call_user_func(array($this, $method));
    }
    throw new Exception("There is no such method!");
}
于 2013-03-28T16:40:47.907 に答える