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()或剩余参数 接收参数到数组中,参数的个数也可以不一致。

不需要判断函数类型,无论是普通函数,类的静态方法或者类的方法,均直接调用,不用去判断方法的类型。