PHP根据函数名称动态调用该函数

对于PHP程序员而言,函数是再熟悉不过的事物了,毕竟咱们成天都在和PHP内置函数以及咱们自定义的函数打交道。通常状况下,咱们想要调用一个函数直接在PHP代码中写上该函数的名称,后面加上一对小括号便可。譬如,咱们要调用本身编写的用于计算两个数之和的add()函数,调用示例代码以下:php

<?php
//计算两个数的和,并返回计算结果
function add($a, $b){
    return $a + $b; 
}

$num1 = 1;
$num2 = 3;
echo add($num1, $num2); //调用add()函数,并传递进对应的参数
//输出:4
?>

不过,若是咱们有两个函数add()(计算两个数的和)和minus()(计算两个数的差),而且咱们但愿,用户输入对应的函数名称,咱们就调用对应的函数,这个时候该怎么作呢?固然,有些程序员可能会想到使用以下方法来实现:程序员

<?php
//计算两个数的和,并返回计算结果
function add($a, $b){
    return $a + $b; 
}

//计算两个数的查,并返回计算结果
function minus($a, $b){
    return $a - $b; 
}

$function_name = 'add'; //这里模拟用户的输入
$num1 = 3;
$num2 = 5;

//根据函数名称字符串执行对应方法
switch ($function_name){
    case 'add':
        add($num1, $num2);
        break;
    case 'minus':
        minus($num1, $num2);
        break;
    default:
        //...
        break;
}
?>

上面这样作,是没有错的。不过,这里只是两个函数的状况,若是用户能够自行输入的函数名称很是多,难道咱们只能老老实实地去写相似上面例子中的一个个case子句?此外,若是咱们想要实现用户输入任何一个函数名称,无论是PHP内置的函数仍是咱们本身定义的函数,只要该函数存在,用户就能够经过输入对应的函数名称来调用,这个时候咱们该怎么办呢?有没有一种方法可以实现:只要用户输入一个函数名称和参数,咱们就直接根据函数名称调用对应的函数呢?数组

不用再想了,PHP已经给咱们提供了可以实现上述功能的函数——call_user_func()call_user_func_array()。咱们只须要将函数名称做为第一个参数,调用该函数所需的参数做为第2~N个参数传递给call_user_func()便可(call_user_func_array()与此相似,不过除了做为函数名称的第一个参数外,后面调用函数所需的参数是以数组的形式总体传递进去的)。函数

这里,咱们能够参考一个具体的示例:code

<?php
//计算两个数的和,并返回计算结果
function add($a, $b){
    return $a + $b; 
}

//计算两个数的查,并返回计算结果
function minus($a, $b){
    return $a - $b; 
}

$function_name = 'add'; //这里模拟用户的输入
$num1 = 3;
$num2 = 5;

//调用自定义函数
echo call_user_func($function_name, $num1, $num2);  //输出:8
echo call_user_func_array($function_name, array($num1, $num2)); //输出:8

//调用PHP内置函数
echo call_user_func('pow', 3, 2);   //至关于pow(3, 2),输出:9
echo call_user_func_array('pow', array(3, 2));  //至关于pow(3, 2),输出:9


//若是函数不须要传入参数,直接传入函数名称便可
echo call_user_func('pi');  //至关于pi(),输出:3.1415926535898
?>
相关文章
相关标签/搜索