-1

私は最近、PHPで変数変数を発見しました。言うまでもなく、その有用性は計り知れません。

$name = "ABC";
$$name = "DEF";
echo ${"ABC"}; //Gives: DEF

それは私に考えさせました、それは私の質問に私たちをもたらします:

可変の名前を持つことができるので、可変の関数も持つことはできませんか?関数の名前のように「関数」ではなく、(多かれ少なかれ)次のようになります。

$func = 'function test() { echo "Success!"; }';
$func(); //If this would work, it would give: Success!

または、さらに良いことに、変数クラス:

$class = 'class { function test() { echo "Success!"; } }';
$instance = new $class;
$instance->test(); //In a (not-so) perfect world this would give: Success!

これは可能ですか?

4

3 に答える 3

2

言うまでもなく、その有用性は計り知れません。

あなたはもっと間違っているはずがありません。
変数変数については何も素晴らしいことはありません。配列を発見したほうがいい

PHPにも可変関数名があり、もう少し使いやすくなっていますが、それでもコードの読み取りは苦痛になります。したがって、それらも避ける方がよいでしょう。

最もよく知られている書き込み専用言語の運命を覚えておいてください。PHPは、PHPの読みやすさのためだけに、一気にそれを食べました。PHPからPerlを作ろうとしないでください。コードを書くのは暇ですが、その中のエラーを見つけるのは本当の仕事です。あなたの仕事を難しくしないでください。

あいまいで困惑したコードを書かないでください。
まっすぐでクリーンなコードを書きます。
あなたはあなた自身とそれを使って働く他の人々に大きな恩恵を与えるでしょう。

于 2011-09-08T06:58:24.877 に答える
1

3番目の例についてはわかりませんが、2番目の例はほぼ機能するはずです(php 5.3以降を使用していると仮定します;))。引用符と関数名はそのままにしておきます。

$func = function() { echo "Success!"; };
$func(); //should give: Success!

「無名関数」を検索するか、これについて詳しくは、ドキュメントをご覧ください。

于 2011-09-08T06:41:27.483 に答える
-1

これが機能する唯一の方法は、を使用することevalです。

$func = "echo 'Success!';";
eval($func);

変数を使用して関数を呼び出すこともできます。

function foo()
{
    echo 'Success';
}

$foo = 'foo';
$foo();

覚えておいてください-あなたはPHPの危険な領域に入っています。これは通常、あなたのコードを維持しなければならない将来の開発者(数ヶ月であなた自身を含む)のためにあなたのコードを曖昧にするだけです。

于 2011-09-08T06:43:49.280 に答える