5

PHPで次のことができますか?

$lstrClassName  = 'Class';
$lstrMethodName = 'function';
$laParameters   = array('foo' => 1, 'bar' => 2);

$this->$lstrClassName->$lstrMethodName($laParameters);

私が現在使用している解決策は、次のように eval() を使用して関数を呼び出すことです。

eval('$this->'.$lstrClassName.'->'.$lstrMethodName.'($laParameters);');

これを解決するためのより良い方法があるかどうか、私は興味があります。

ありがとう!

4

4 に答える 4

9

そのために eval は必要ありません...バージョンによっては

class Test {
    function hello() {
        echo "Hello ";
    }

    function world() {
        return new Foo ();
    }
}

class Foo {

    function world() {
        echo " world" ;
        return new Bar() ;
    }

    function baba() {

    }
}

class Bar {

    function world($name) {
        echo $name;
    }


}


$class = "Test";
$hello = "hello";
$world = "world";
$object = new $class ();
$object->$hello ();
$object->$world ()->$world ();
$object->$world ()->$world ()->$world(" baba ");

出力

Hello World baba

また、PHP 5.4 を使用している場合は、変数を宣言せずに直接呼び出すことができます。

http://php.net/manual/en/function.call-user-func.phpも参照してください。call_user_func

于 2012-04-05T14:23:46.163 に答える
4

コードを試しましたか?何かがうまくいくかどうかを知る最良の方法は、それを試すことです。試してみると、そうです、動作することがわかります(と呼ばれるメソッドを定義するオブジェクトのインスタンスである$thisと呼ばれるプロパティがあると仮定します)。Classfunction

2つの機能call_user_func()call_user_func_array()

于 2012-04-05T14:21:23.660 に答える
1

eval ではなく、関数や配列に使用できるcall_user_func_arrayをお勧めします。ただし、構文はあなたが提案したものとは異なります。また、可能な限り eval を避ける傾向があるという事実により、次のように使用できます。

オブジェクトで呼び出すには、次のようにします。

$return=call_user_func_array(array($objInstance, "CLASSMETHOD"), $paramArray);

于 2012-04-05T14:24:40.577 に答える
0

テストされていませんが

this->$$lstrClassName->$$lstrMethodName($laParameters); 

http://php.net/manual/en/language.variables.variable.php

于 2012-04-05T14:21:05.950 に答える