批改状态:合格
老师批语:剩余参数是一个重点, 用处非常大, 多做几个这样的练习
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]); 
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号