1. 实例演示默认参数;
2. 实例演示剩余参数;
<?php /* * 1、设置默认参数 */ function sum($x = 12, $y = 23){ return $x + $y; } // 默认值 echo sum(); echo "<hr/>"; // 一个参数 echo sum(5); echo "<hr/>"; // 两个参数 echo sum(7, 9); echo "<hr/>"; // ------------------------------------------------------------ /* * 2、设置第二个参数默认值 */ function sum1($x, $y = 6){ return $x + $y; } // 设置一个参数 echo sum1(5); echo "<hr/>"; // 设置两个参数 echo sum1(4, 9); echo "<hr/>"; // ------------------------------------------------------------ /* * array_sum() 函数换回数组中所以值的和 * func_get_args() 获取一个函数的所有参数 */ function sum3(){ $num = func_num_args(); echo "一共有:" . $num . "个参数<br>"; return '所有值的和是:' . array_sum( func_get_args() ); } echo sum3(1,3,5,7,9); echo '<br>'; echo sum3(12,25,98,45,36,4,9,50,66); echo '<hr>'; // ------------------------------------------------------------ /* * 剩余参数:可变长参数 */ function sum4($x, $y, ...$z){ return $x + $y + array_sum($z); } echo sum4(3,6); echo '<hr>'; echo sum4(3,6, 3,6,7,8,456,89); echo '<hr>'; function sum5($x,...$y){ return $x + array_sum($y); } echo sum5(56,56,23,78,9,5,6,2,45); echo '<hr>'; echo sum5('a','b','cc','dd',4); echo '<hr>'; function sum6(int $x, ...$y){ return $x + array_sum($y); } echo sum6(2.4, 4, 6.2, 9, 10.8);
结果:
实例演示剩余参数;
// ------------------------------------------------------------ /* * array_sum() 函数换回数组中所以值的和 * func_get_args() 获取一个函数的所有参数 */ function sum3(){ $num = func_num_args(); echo "一共有:" . $num . "个参数<br>"; return '所有值的和是:' . array_sum( func_get_args() ); } echo sum3(1,3,5,7,9); echo '<br>'; echo sum3(12,25,98,45,36,4,9,50,66); echo '<hr>'; // ------------------------------------------------------------ /* * 剩余参数:可变长参数 */ function sum4($x, $y, ...$z){ return $x + $y + array_sum($z); } echo sum4(3,6); echo '<hr>'; echo sum4(3,6, 3,6,7,8,456,89); echo '<hr>'; function sum5($x,...$y){ return $x + array_sum($y); } echo sum5(56,56,23,78,9,5,6,2,45); echo '<hr>'; echo sum5('a','b','cc','dd',4); echo '<hr>'; function sum6(int $x, ...$y){ return $x + array_sum($y); } echo sum6(2.4, 4, 6.2, 9, 10.8);
3. 实际演示匿名函数,并调用外部数据;
<?php /* * 匿名函数(anonymous function),也叫闭包函数(closures) * 临时创建一个没有指定名称的函数,经常用作回调函数(callback)参数的值 * 当然,也有其他应用的情况。匿名函数目前是通过Closure 类类实现的。 */ // 匿名函数:函数表达式 $sum = function ($x, $y){ return $x +$y; }; echo $sum(2, 5.6); echo '<hr>'; // --------------------------------------------- //匿名函数作为函数的回调参数来使用 $arr = [2,4,5,7,8,42]; // usort() 使用用户自定义的比较函数对数组进行排序 usort($arr,function ($x, $y){ // return $x - $y; // 升序 return $x + $y; // 降序 // return $x <=> $y; //php7.0+以上可用 }); echo '<pre>' . print_r($arr,true); echo '<hr>'; // --------------------------------------------- $email = 'molang@php.cn'; // “ & ”引用传递,就是将外部变量的地址传入,不是传入值 $ff = function () use (&$email){ $email = 'admin@php.cn'; return $email; }; echo '1、' . $email; echo '<hr>'; echo $ff(); echo '<hr>'; echo $email; echo '<hr>'; function demo(){ $name = 'molang'; return function () use ($name){ $name = 'peter'; return $name; }; } echo demo()();
4. 实际演示call_user_func_array()的常用场景(忽略调用对象方法)
<?php function sum($x, $y){ return $x + $y; } // 传统方式 echo sum(3,8); echo '<hr>'; // 回调方式来调用 echo call_user_func('sum',8,9); echo '<hr>'; // 回调方式来调用 echo call_user_func_array('sum',[2,6]); echo '<hr>'; print_r([1,2,3,4,5]); // 可以用回调的方式来预定义函数/系统函数 echo call_user_func_array('print_r',[[1,2,3,4,5]]); echo '<hr>'; class AA { public function sum($x, $y){ return $x + $y; } public static function mul($x, $y){ return $x * $y; } } echo (new AA) -> sum(5,9); echo '<hr>'; //可以将对象/类中的方法以回调的方式来执行 echo call_user_func_array([ (new AA),'sum' ], [23,56]); echo '<hr>'; echo call_user_func_array( ['AA','mul'], [6,14]);