関数名で変数を使用できますか?(「はい」の場合、どのように?)
$name = "john";
function name_function() {
//Do something
}
だから私の関数名はjohn_function()
私の意味がわかりますか?
たくさんの機能があればもっといい方法でやろうと思います。
john_init()
john_setup()
john_save()
john_clear()
あなたが望むようにそれを行うことはできません。
function $name_something(){ }
ただし、変数関数は次のように使用できます。
function john_something()
{
echo 'called';
}
$name = 'john';
$functionName = $name . '_something';
$functionName();
ただし、推奨されるわけではありませんが、ほとんどの場合、より良い方法があります。
eval()
というのは 1 つの方法ですが、個人的には厄介だと思います。
コードをクラスで囲む場合は、次を使用できます。
class MyCode {
public static function __callStatic($functionName, $values)
{
// $functionName Receive the name of the function
// $values Receives an array with all the parameters
/* Your code per person here */
}
}
この関数は次のように呼び出すことができます。
MyCode::johnDoesSomething('At home', 'playing with PHP');
詳細については、http ://www.php.net/manual/en/language.oop5.overloading.php#object.call を参照してください。
あなたの質問と私の答えに対する批判を読んだ後。OOP実装を探しているだけだと思います
class Person {
public function __construct() // init()
{
/* Do something */
}
public function setup()
{
/* Do something */
}
/* etc */
}
そして、次のように使用します。
$john = new Person(); // __construct() will be executed here automaticaly
$john->setup();
PHP のクラスとオブジェクトの詳細については、PHP ドキュメントを参照してください: http://www.php.net/manual/fa/classobj.examples.php
あなたが提案する方法で呼び出すことができるような方法で関数を宣言することはできません。
クロージャー(匿名関数)を見てみたいと思います-それはあなたの仕事に対するエレガントな解決策になると思います。
次のようなことを試してください:
$name = "john";
$f = "function {$name}_function() {
//Do something
}";
eval($f);
john_function();
これはあなたの質問に一致する唯一の解決策です。そして、それは悪い解決策です(DANGEROUSeval()
) 。どこでも使用しない方がよいでしょう。