2011-12-18 6 views
9

私は変数を持っています$string = "blah";関数を動的に作成するにはどうすればよいですか?

どのように変数の値を名前として持つ関数を作成できますか? これはPHPで可能ですか? function $string($args){ ... }か何かのように

、など、それを呼び出すことができる:

blah($args); 
+0

を試してみてください、あなたは[匿名関数](http://php.net/manual/en/functions.anonymous.php)をお探しですか? – Indranil

+6

驚くべきアイデア。あなたは本当に何をしようとしていますか? –

+0

いいえ、私は同じコードで利用できるように名前が必要です:) – Alex

答えて

9

、しかし...

あなたはPHP 5.3を使用している場合は、無名関数を使用することができます。

<?php 
$functionName = "doStuff"; 
$$functionName = function($args) { 
    // Do stuff 
}; 

$args = array(); 
$doStuff($args); 
?> 
+2

技術的には、これは関数を定義するのではなく、クロージャを定義します。違いを見るには 'get_defined_functions()['user']'と 'get_defined_vars()'を試してください。 – jameshfisher

+0

@jameshfisher PHPの「クロージャ」は[匿名***関数***](http://php.net/manual/en/functions.anonymous.php)としても知られており、キーワード 'function'は構文確かに、これは*名前付き関数*を定義するものではありませんが、私はそれがまったく「関数」を定義していないと言うために、無計画の点まで歩行者を超えていると思います。 –

+0

@ MarkAmery PHPの "関数"と "変数"は異なる名前空間にあります。彼らは根本的に異なっています。これは意味上の問題であり、構文上の問題ではありません。 – jameshfisher

10

これは良いアイデアではないかもしれませんが、あなたはこのような何か行うことができます:あなたが呼び出すことができます

$string = "blah"; 
$args = "args" 
$string = 'function ' . $string . "({$args}) { ... }"; 
eval($string); 
+11

いいえ!単純にいいえ! :) – PeeHaa

+0

面白い、これはうまくいくはずだ、私はそれを考えなかった:D – Alex

+4

これは受け入れられた答えでなければならない。これは関数を定義する唯一の解決策であり、クロージャではありません。違いを見るには 'get_defined_functions()['user']'と 'get_defined_vars()'を試してください。 – jameshfisher

1

を変数に格納された名前による関数、変数に関数を割り当てたり、変数を使用して関数を呼び出すこともできます。あなたが望むものでないなら、もっと説明してください。偉大な設計上の選択のような音はありません、それはそれを再考する価値があるかもしれません

+2

この回答はコメントとして素晴らしいでしょう:) – PeeHaa