可以在函数名中使用变量吗?(如果“是”,那怎么办?)
$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()
是一种方式,把我个人认为是icky。
如果您将代码包含在一个类中,您可以使用:
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();
这是与您的问题匹配的唯一解决方案。这是一个糟糕的解决方案(危险),你最好避免eval()
在任何地方使用。
您不能以能够以您建议的方式调用它的方式声明函数。
我会看看闭包(匿名函数) - 我怀疑这将是您任务的优雅解决方案。