2012-04-05 17 views
2

PHPで次のことができますか?変数でメソッドを呼び出すことはできますか?

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

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

私が今使っているソリューションは、そのようにeval()関数で関数を呼び出すことである:

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

これを解決するbeter方法がある場合、私は好奇心が強いです。

ありがとうございます!

+3

通常、あなたはこれに頼らなければならないときに何か間違っています。あなたは何を達成しようとしていますか? – NullUserException

+1

実際には、同じクラスの異なるメソッドを呼び出すのではなく、同じメソッド名を持つ異なるクラスにオブジェクトを再編成してください。メソッド名ではなく、オブジェクトを渡すことができます。 – rjmunro

+0

'eval()'は良い方法ではないことを認識しています。あなたはなぜあなたがそれを使うのか正確に分からない限り、文字列 'eval()'を使うことはほとんどありません。*あなたはもっと良い選択肢を除外しました。しかし、あまりにも多くのより良い選択肢があるので...おそらく、あなたはおそらく文字列 'eval()'を使うべきではありません。 – dreftymac

答えて

5

あります...あなたのバージョンに応じて、

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を使用している場合は、私はあなたの機能のために、配列ではなく、evalのために使用することができるcall_user_func_arrayをお勧めします。また、call_user_funchttp://php.net/manual/en/function.call-user-func.php

+0

これは動作します!ありがとう! – pascalvgemert

+0

あなたは歓迎です....受け入れることを忘れないでください:D – Baba

+0

完了、ありがとう男! – pascalvgemert

3

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

は、あなたがそれを行うためにeval必要はありません。また、二つの機能call_user_func()call_user_func_array()

0

で見たいと思うかもしれません変数

を宣言することなく、直接呼び出します。構文はあなたが示唆したものとは異なっている、と私は可能ながら、evalを避ける傾向にあるという事実は、あなたがそれを使用することができますしかし :オブジェクトとそれを呼び出すには

は、ちょうどそれが好きですか:

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

関連する問題