2011-01-10 14 views
13

変数を使って関数を呼び出す方法はありますか?php - 関数を動的に呼び出す

たとえば、関数Login()を呼び出したいとします。私はこれを行うことができます:

私は$ varFunctionを使用できますか?

+1

はい、PHPはこれをサポートしています。しかし、私はあなたがマゾヒストまたは何らかの妨害を計画していない限り、それを使用しないことを強くお勧めします。 –

+2

こんにちは、実際にこの理由は、同じ関数名を持っていたいからです。ログインモジュールとプロファイルモジュールの両方にmain()という関数呼び出しがあります。 – nuttynibbles

+0

Doh! **それを継承する**! –

答えて

23

はい、次のことができます。

$varFunction(); 

または:

call_user_func($varFunction); 

を使用すると、悪質な入力のための$ varFunctionを検証していることを確認してください。その後、

abstract class ModuleBase { 
    public function main() { 
    echo 'main on base'; 
    } 
} 

class ModuleA extends ModuleBase { 
    public function main() { 
    parent::main(); 
    echo 'a'; 
    } 
} 

class ModuleB extends ModuleBase { 
    public function main() { 
    parent::main(); 
    echo 'b'; 
    } 
} 

function runModuleMain(ModuleBase $module) { 
    $module->main(); 
} 

、正しいモジュールインスタンスでrunModuleMain()を呼び出します。


編集:あなたのモジュールの場合

、この(あなたの実際のニーズに応じて)のようなものを検討してください。

+0

ねえ...私はこれを使用すると思う。ウェブホスティング会社がこの機能を無効にする可能性はありますか? – nuttynibbles

+0

これは単なるスクリプトなので、これを無効にすると、おそらくコードを実行することができなくなります。 – maartenba

6

あなたが使用することができます...

$varFunction = "Login"; 
$varFunction(); 

...、それは変数が信頼されていることを確認するためには言うまでもないです。

+0

これもうまくいきます。しかし、これとcall_user_func();の間で異なるワットです。 – nuttynibbles

+0

@nuttynibbles本当に、私が言及したバージョンは、関数呼び出しの構文的な砂糖です。多少のマイナーな違いがあるかもしれませんが、私は何がわかりません。 – alex

2
<?php 
    $fxname = 'helloWorld'; 

    function helloWorld(){ 
    echo "What a beautiful world!"; 
    } 

    $fxname(); //echos What a beautiful world! 
?> 
0

あなたは本当に、これは両方に使用すると、一貫性のあるコードの構造を持っており、いくつかのモジュールに対して同一のメソッド名を保つことが可能になるよう、モジュールのクラスを使用して検討すべきです。これにより、すべてのモジュールのコードを継承または変更する柔軟性も得られます。あなたを提供することができ、ダイナミック匿名関数、あるユーザーが使用できるPHP 5.3から始まる上述のようにメソッドを呼び出す以外の話題(つまり、関数名、またはcall_user_func_ *関数ファミリなどの変数を使用して、ある)に

closuresあなたが望むことをやり遂げるための別の方法で

関連する問題