可变函数的意思类似可变变量,指的是函数调用时,该函数的名字可以是一个变量,PHP会自动根据该变量的值去寻找同名的函数,以达到杂技般的效果。
但有一些内置的语言结构不能使用可变函数,如echo
等很多类似的系统内置函数或语言结构。
// 定义函数
function foo(){
echo 1;
}
function bar(int $num){
echo $num;
}
// 定义变量
$fn1 = "foo";
// 输出 1
$fn1();
// 定义变量
$fn2 = "bar";
// 输出 2
$fn2(2);
// 花式调用、输出 1
"foo"();
对于类的方法也可以使用可变函数调用:
// 定义类
class Example{
function foo(){
echo 1;
}
static function bar(int $num){
echo $num;
}
}
// 实例化
$exam = new Example();
// 输出 1
$fn1 = "foo";
$exam->$fn1();
// 输出 2
$fn2 = "bar";
Example::$fn2(2);
// 花式调用 输出 1
$exam->{"foo"}();
// 花式调用 输出 2
Example::{"bar"}(2);
可变函数的变量也可以是 callable
类型:
// 定义类
class Example{
function foo(){
echo 1;
}
static function bar(){
echo 2;
}
}
// 输出 1
$fn1 = [new Example(), "foo"];
$fn1();
// 输出 2
$fn2 = ["Example", "bar"];
$fn2();
// 输出 2
$fn2 = "Example::bar";
$fn2();