PHP函数的默认参数
定义函数形参时可以设置默认参数,当函数被调用未传参时会使用默认参数。有传参时会优先传参值。
实例
//演示默认参数
//定义函数sum求和 有$a、$b 2个参数均设置了默认值5
function sum($a=5,$b=5){
return $a+$b;
};
//函数调用 我不传输任何参数 但是函数会返回10 因为有2个默认参数
echo sum(),'
';
//我值传一个值 此时结果是15 参数会代替默认参数 也就是$a是10
echo sum(10),'
';
//当传入2个值时候 分别以我传参为优先级最高 来计算。
echo sum(10,10),'
';
//当参形参自定义后 要按照顺序传入参数
运行实例 »
点击 "运行实例" 按钮查看在线实例
PHP剩余参数
可以支持部分参数以数组的方式传入 适合有大量参数时候使用。
实例
//演示 剩余参数:可变长参数
function sum3($a,$b,...$c){
return $a+$b+array_sum($c);
};
echo sum3(5,5,10,10,10),'
';
//根据剩余参数特性可以将部分参数从外部数组直接获取
function sum4($a,$b,...$arr){
return $a+$b+array_sum($arr);
};
$arr=[20,20,20];
echo sum4(5,5,...$arr),'
';
//限制返回值 限制第一个参数为int整数 '6'运算时候会自动转换成数字 不能转换的会忽略不会报错
function sum5(int $a,$b,...$arr){
return $a+$b+array_sum($arr);
};
$arr=[6,'p6d','6lang'];
echo sum3(5,5.2,...$arr),'
';
//上面数组中 虽然出现了 字符串 但是并不会报错 不能转换为数组的 只是不进行计算而已。
运行实例 »
点击 "运行实例" 按钮查看在线实例
PHP匿名函数
实例
//匿名函数
//匿名函数 函数表达式
$sum=function($a,$b){
return $a+$b;
};
//调用输出
echo $sum(2,3),'
';
运行实例 »
点击 "运行实例" 按钮查看在线实例
PHP匿名函数获取外部数据
实例
// 匿名函数获取外部数据
$str='我是全局变量中的一段文字。11111';
$str2='我是全局变量中的一段文字。22222';
//在匿名函数中可以通过 use($var)将全局变量 传值 获得值(函数内修改不影响全局)
$func1=function() use($str){
$str1='我想看看外面的世界~';
return $str;
};
echo $func1();
$str='我是全局变量中的一段文字。11111';
//在匿名函数中可以通过 use(&$var)将全局变量 引用传递(传址)调用(函数内修改影响全局)
$func2=function() use(&$str2){
$str2='我被刁民 func2 使用了& 把我给顶替了~';
return $str2;
};
echo $func1(),'
';
echo $func2(),'
';
//函数允许嵌套调用
function demo(){
$name='大灰狼 函数嵌套调用';
return function() use($name){
return $name;
};
};
//因为demo返回的是一个函数 所以得先放到一个变量中 在运行
$f1=demo();
echo $f1(),'
';
//也可以简化为
echo demo()();
运行实例 »
点击 "运行实例" 按钮查看在线实例
call_user_func_array()的常用场景
// 语法 call_user_func_array($callback, $param_arr);
常用场景如
1、需要调用的函数名是未知的;
2、要调用函数的参数类型及个数也是未知的;
实例
//实际使用
function sayEnglish($fName, $content) {
echo 'I am ' . $content;
}
function sayChinese($fName, $A, $B) {
echo $A . $B;
echo "
";
}
function say() {
$args = func_get_args();
call_user_func_array($args[0], $args);
}
say('sayChinese', '我是', '中国人');
say('sayEnglish', 'Chinese');
//改进-----------------------------------------------------
echo '
';
function sayEnglish2(...$arr) {
echo 'Americans say:
' .print_r($arr,true);
}
function sayChinese2(...$A) {
echo '中国说:
'.print_r($A,true);
echo "
";
}
function say2($fname,...$arr) {
call_user_func_array($fname, ...$arr);
}
say2('sayChinese2', ['我是中国人', '我不姓福','但是我日子幸福']);
say('sayEnglish2', ['Chinese','good']);
//say($funcName,$conterArr);
运行实例 »
点击 "运行实例" 按钮查看在线实例
动态调用普通函数时,比如参数和调用方法名称不确定的时候很好用。
函数名可以用参数的方式传递进去,因而调用不同函数。 配合func_get_args()或剩余参数 接收参数到数组中,参数的个数也可以不一致。
不需要判断函数类型,无论是普通函数,类的静态方法或者类的方法,均直接调用,不用去判断方法的类型。