🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## PHP 可变函数 在PHP中如果将"函数名称"赋予字符串类型的变量,但是在使用该变量时,如果带有小括号,那么PHP引擎将解析函数 ``` $func_name = 'md5'; echo $func_name('curder') , '<br />'; // 5039dc9c870e0e9fe780ed7b5a339597 echo md5('curder') , '<br />'; // 5039dc9c870e0e9fe780ed7b5a339597 ``` > get_defined_functions() 得到所有已定义的函数,返回 array , > 可变函数不能用于类似 `echo()` `print()` `unset()` `isset()` `empty()` `include()` `require()` 以及类似的语言结构。 ## PHP 回调函数 回调函数就是调用函数的时候将另外一个函数的名称当作参数传递进去,并且在函数体中金雄调用 ### 如果调用回调函数? * 可以通过可变函数的形式在函数体中进行调用 * 可以通过 `call_user_func()` 和 `call_user_func_array()` 进行调用 ``` function study() { echo 'studying...'; } function play() { echo 'playing...'; } function sing() { echo 'singing...'; } function doWhat($func_name) { echo 'I am '; $func_name(); } doWhat('study'); // I am studying... doWhat('sing'); // I am singing... ``` ### 系统函数 `array_map()` 的应用 ``` $arr = [2, 3, 4, 5, 6]; // 将数组 $arr 中所有的单元值 * 3 function myFunc($value) { // 定义自定义的回调函数 return $value * 3; } $res = array_map('myFunc', $arr); print_r($res); ``` ### 系统 `array_filter()` 函数使用 ``` $arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; // 获取数组 $arr 中所有奇数 function odd($value) { if ($value % 2 == 1) return $value; } $arr = array_filter($arr, 'odd'); print_r($arr); // Array ( [0] => 1 [2] => 3 [4] => 5 [6] => 7 [8] => 9 ) ``` ### 系统函数 `call_user_func()` 和 `call_user_func_array()` 的简单使用 ``` <?php function play($name, $age) { return 'My name is ' . $name . ', I am ' . $age; } echo call_user_func('play', 'Curder', '25'); // My name is Curder, I am 25 echo call_user_func_array('play', ['Curder', '25']); // My name is Curder, I am 25 ``` ## PHP 匿名函数(Closure) 匿名函数也叫闭包函数,允许临时创建一个没有指定名称的函数,最经常用作回调函数参数的值。 **匿名函数也可以作为变量的值来使用** ``` $func_name = function ($string) { return 'this is a test code' . $string; }; echo $func_name('!!!'); // this is a test code ``` ### 通过 `create_function()` 创建匿名函数 ``` $func_name = create_function('$x,$y','return $x+$y;'); echo $func_name(2,6); // 8 ``` ### 使用 `array_map()` 时传递回调函数 ``` $arr = [3, 45, 7, 8, 9]; $res = array_map(function($value){return $value*3;},$arr); // Array ( [0] => 9 [1] => 135 [2] => 21 [3] => 24 [4] => 27 ) ``` ### 使用 `call_user_func()` 传递回调函数 ``` call_user_func(function ($username) { echo "hi {$username}"; }, 'Curder'); // hi Curder ```