PHP函数的参数与返回值、匿名函数、回调函数小结
发布于:2022-03-25 11:15:09
次阅读
1. 函数的参数与返回值
- 函数是全局成员 不受作用域限制。
- php函数的作用:完成特定功能的代码块,封装成函数可以实现复用性,提高代码的可维护性。
- php内置了上千种函数可供我们直接调用,函数库文件已经编译到我们所使用的发行版中了,可以直接指定函数名称来调用,当然我们也可以自定义函数来完成特定功能。
- 函数的命名规则基本和变量的命名规则一直,可以以字母或下划线开头,后跟字母数字或下划线,但不能以数字开头,函数不区分大小写。
- 函数有三大要素 参数,返回值,函数体
- php函数语法:function 函数名称([ 参数类型限定 参数列表]) :返回值类型{函数体return 返回值
- 函数只能返回单一的值,返回值的数据类型可以是任意类型
- 函数碰到return语句,立即结束程序执行,return后面的代 码不会被执行}
- 参数:可选的,对外提供一个接口,供函数调用者按照自己的意愿改变函数体内的执行行为
- 参数 形参 实参
- 默认参数:有默认值的参数,如果不传参或者少传参数,就会默认参数的值
- 参数是从左往右求值,所以默认参数放到最右边
- 参数按引用传,在变量前加&符号,引用的变量值变化,原变量就会变化
<?PHP// 不同的脚本不能有同名函数,同名函数要放在不同命名空间namespace spaceOne { $money = 8000; $pay = 1800; // 定义的函数可在定义语句前面调用 echo payment($money, $pay); // 参数加&为引用原变量,运算后值会变 function payment(&$money, $pay, $paymentWay = '支付宝') { $money = $money - $pay; return "通过{$paymentWay}支付了{$pay}元,余额{$money}元。<br>"; } $pay = 2800; echo payment($money, $pay); $pay = 850; $paymentWay = '微信'; echo payment($money, $pay, $paymentWay);}namespace spaceTwo { $state = true; // say(); 函数还没执行定义,在此处调用会出错。 if ($state) { function payment() { return '我们在学习PHP。'; } } echo payment();}
返回值
<?PHP// !函数返回值function arr(){ return [3, 6, 9];}[$a, $b, $c] = arr();echo ($a + $b + $c);// !接口开发 函数返回值会转为通用的json格式的数据返回,这样以来就可以和其他的编程语言进行数据交互,例如js与java php pythonfunction login(): string{ $loginMsg = ['status' => 1, 'msg' => '登录成功!']; return json_encode($loginMsg, 320);}$lgoinMsg = login();var_dump($lgoinMsg);var_dump(json_decode($lgoinMsg));
2. 匿名函数、闭包
<?PHP/* *特殊形式的函数 * 1.匿名函数(闭包函数) * 2.回调函数 * 3.递归函数 * */// 匿名函数(闭包函数)$praise = function ($mascot) { return "每个人都喜欢{$mascot}。<br>";};echo $praise('冰敦敦');// 全局变量是指声明在函数外部的变量,在函数内部访问不到。// 局部变量是指声明在函数内部的变量,只能在函数内部被访问到。 // 定义全局变量$mascot1 = '冰敦敦';$mascot2 = '雪融融';// 定义函数function praise(){ // 下面语句是错误的,无法访问外部变量 // return "每个人都喜欢{$mascot}。<br>"; // 用global访问 global $mascot1; // 用超全局数组$GLOBALS $_GET $_POST return "每个人都喜欢{$mascot1}和{$GLOBALS['mascot2']}。<br>";}echo praise();// 闭包用关键字use使用全局变量$praise = function ($city) use ($mascot1, $mascot2) { return "{$mascot1}和{$mascot2}是{$city}冬奥会的吉祥物。<br>";};echo $praise('北京');// 通过引用传递,闭包可改变变量值$praise = function ($mascot) use (&$mascot1) { $mascot1 = $mascot;};$praise('熊猫');echo $mascot1;
3. 回调函数
- 回调函数:php回调是指在主线程函数执行的过程中,突然跳去执行设置的回调函数,回调函数执行结束后, 再回到主线程处理接下来的流程
- 匿名函数最通常作为回调函数的参数使用
- php脚本是单线程,脚本是同步执行的,如果遇到耗时函数将会发生线程阻塞的问题,应该将它改为异步回调的方式执行
<?PHP// 回调函数// 定义匿名函数,把数组中的偶数筛选出来,组成一个新数组$odd = function (array $arr) { // 遍历数组 for ($i = 0; $i < count($arr); $i++) { // 判断为偶数,组成新数组 if ($arr[$i] % 2 == 0) { $newArr[] = $arr[$i]; } } return $newArr;};$arr = [2, 35, 22, 26, 27, 29, 28, 223, 226, 228, 225, 269, 248, 239, 2310, 2564, 2351, 2258];// 定义函数,求数组中偶数的各// 函数第1个参数为函数,第2个参数为数组function sum(Closure $f, array $arr){ return array_sum($f($arr));}echo sum($odd, $arr) . '<br>';// 使用call_user_func()把第一个参数作为回调函数调用,后面是参数echo 'call_user_func函数' . call_user_func('sum', $odd, $arr) . '<br>';// 调用匿名函数var_dump(call_user_func($odd, $arr));