mysql 匿名函数调用_7.30 PHP函数默认参数、剩余参数、匿名函数创建并调用外部数据...

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值