这个问题实际上非常简单,但有些难以解释,但我会尽我所能。
假设以下功能和类:
somethingsomething.php
function do_something($a, $b, $whatToDo) {
$value = someRandomClass::doThis();
return $a + $b * $value;
}
someRandomClass.class.php
class someRandomClass {
public static doThis() {
return $this->valueThis;
}
public static doThat() {
return $this->valueThat;
}
public static doSomethingElse() {
return $this->valueSomethingElse;
}
}
所以,我们有一个功能可以做某事。它有3个参数:
$a
=一个整数
$b
=也是一个整数
$whatToDo
。 =一个字符串,this
,that
或somethingElse
如您所见,do_something()
中的计算需要一个通过类中3个函数之一接收的值。但是调用的函数应该由$whatToDo
中的值定义。当然,我可以创建一个if或switch语句,如下所示:
function do_something($a, $b, $whatToDo) {
if($whatToDo === "this") {
$value = someRandomClass::doThis();
} elseif ($whatToDo === "that") {
$value = someRandomClass::doThat();
} elseif ($whatToDo === "somethingElse") {
$value = someRandomClass::doSomethingElse();
}
return $a + $b * $value;
}
但这看起来很糟糕,如果我得到更多(实际代码最多可以有41个不同的“$whatToDo
”),那真的很难读。
我想知道是否有办法使用变量来“创建”一个函数名并调用该函数,如下所示:
function do_something($a, $b, $whatToDo) {
$value = someRandomClass:: "do" . $whatToDo ."()";
return $a + $b * $value;
}
因此如果$whatToDo
包含“this”,则会调用doThis()
。
这可能是必要的吗?
答案 0 :(得分:4)
您可以使用变量函数进行此类操作:
$fn = "do".$whatToDo."()"; // create a string with the function name
$value = someRandomClass::$fn; // call it
更多信息:
答案 1 :(得分:1)
你可以使用变量'调用函数的值,如
function a(){ echo "Testing"; }
$b="a";
$b();
这会回应Testing