2011-09-12 19 views
0

実際に、同様の関数名を持つすべての同様の関数を組み合わせた関数を作成したいと考えています。たとえば、phpの関数名に引数を追加しますか?

<?php 
//this function carry the function name I wish to create. For example:function try 
a("try"); 


function a($arg) 
{ 
    //I wish to create function with the name carried by $arg 
    //but function $arg won't work 
} 
?> 

誰でも私にそのような機能について教えていただけますか?

+1

あなたはなぜこれをやりたいのですか?これは壊れたデザインの匂いがする、私はあなたが欲しいものを達成するためのよりよい方法があると確信している –

+0

あなたは、関数bを呼び出すラインの後にいるという意味ですか?この場合、可変変数$$ argが必要ですが、@Pekkaにはより良い方法があることに同意します。 –

+0

(ref)[create_function](http://php.net/manual/function.create-function.php) – Yoshi

答えて

1

PHPはので、すべてあなたがしなければならないだろうコール時の関数名などの変数を使用することができますが、機能道を行かなければならない場合は、あなたが適切

function a(Closure $callback) 
{ 
    $callback(); 
} 

a(function() { 
    echo 'This is a callback'; 
}); 
それを行う必要があります

function a($arg) 
{ 
    if (!function_exists($arg)) { 
     throw new InvalidArgumentException(
      sprintf('"%s" is not a valid function', $arg)); 
    } 
    $arg(); 
} 

です

あるいは

$b = function() { 
    echo 'I am an anonymous function'; 
}; 

a($b); 

http://php.net/manual/en/functions.anonymous.php

を参照してください。
+0

私が知る限り、[eval()](http://es.php.net/eval)を使用しない限り、変数を使って既存の関数を呼び出すことはできますが、*作成することはできません。言うまでもなく、安全でなく、コードを維持するのが難しい最速の方法です。しかし、これはおそらくクラスメソッドで行うことができます(http://es.php.net/__call)。しかし、主な問題は次のとおりです。 –

+0

@Álvaro私は質問が誤解されている可能性があります – Phil

+0

質問は分かりません:)しかし、あなたの答えはとにかく素晴らしいです。 –

関連する問題