可以在函数名中使用变量吗? (如果“是”,那怎么办?)
$name = "john";
function name_function() {
//Do something
}
所以我的函数名称将是john_function()
你明白我的意思吗?
如果我有很多功能,我会做得更好,我的名字会像
john_init()
john_setup()
john_save()
john_clear()
答案 0 :(得分:6)
它不能像你想要的那样完成,这似乎就像
function $name_something(){ }
但您可以像这样使用Variable Functions:
function john_something()
{
echo 'called';
}
$name = 'john';
$functionName = $name . '_something';
$functionName();
虽然不是推荐的,但几乎总有一种更好的方法。
答案 1 :(得分:4)
eval()
是一种方式,我个人认为这很蠢。
如果将代码括在一个类中,则可以使用:
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
答案 2 :(得分:3)
在读完你的问题并批评我的答案后。我认为你只是在寻找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
答案 3 :(得分:1)
答案 4 :(得分:0)
尝试这样的事情:
$name = "john";
$f = "function {$name}_function() {
//Do something
}";
eval($f);
john_function();
这是与您的问题相匹配的唯一解决方案。
这是一个糟糕的解决方案( DANGEROUS ),您最好避免在任何地方使用eval()
。
答案 5 :(得分:0)
你不能以一种能够以你建议的方式调用它的方式声明一个函数。
我会看一下closures (anonymous functions) - 我怀疑这将是你任务的优雅解决方案。