ASCII码 ASCII码

PHP函数的参数与返回值、匿名函数、回调函数小结

发布于:2022-03-25 11:15:09  栏目:技术文档

1. 函数的参数与返回值

  • 函数是全局成员 不受作用域限制。
  • php函数的作用:完成特定功能的代码块,封装成函数可以实现复用性,提高代码的可维护性。
  • php内置了上千种函数可供我们直接调用,函数库文件已经编译到我们所使用的发行版中了,可以直接指定函数名称来调用,当然我们也可以自定义函数来完成特定功能。
  • 函数的命名规则基本和变量的命名规则一直,可以以字母或下划线开头,后跟字母数字或下划线,但不能以数字开头,函数不区分大小写。
  • 函数有三大要素 参数,返回值,函数体
  • php函数语法:function 函数名称([ 参数类型限定 参数列表]) :返回值类型{函数体return 返回值
    1. 函数只能返回单一的值,返回值的数据类型可以是任意类型
    2. 函数碰到return语句,立即结束程序执行,return后面的代 码不会被执行}
  • 参数:可选的,对外提供一个接口,供函数调用者按照自己的意愿改变函数体内的执行行为
    • 参数 形参 实参
    • 默认参数:有默认值的参数,如果不传参或者少传参数,就会默认参数的值
    • 参数是从左往右求值,所以默认参数放到最右边
    • 参数按引用传,在变量前加&符号,引用的变量值变化,原变量就会变化
  1. <?PHP
  2. // 不同的脚本不能有同名函数,同名函数要放在不同命名空间
  3. namespace spaceOne {
  4. $money = 8000;
  5. $pay = 1800;
  6. // 定义的函数可在定义语句前面调用
  7. echo payment($money, $pay);
  8. // 参数加&为引用原变量,运算后值会变
  9. function payment(&$money, $pay, $paymentWay = '支付宝')
  10. {
  11. $money = $money - $pay;
  12. return "通过{$paymentWay}支付了{$pay}元,余额{$money}元。<br>";
  13. }
  14. $pay = 2800;
  15. echo payment($money, $pay);
  16. $pay = 850;
  17. $paymentWay = '微信';
  18. echo payment($money, $pay, $paymentWay);
  19. }
  20. namespace spaceTwo {
  21. $state = true;
  22. // say(); 函数还没执行定义,在此处调用会出错。
  23. if ($state) {
  24. function payment()
  25. {
  26. return '我们在学习PHP。';
  27. }
  28. }
  29. echo payment();
  30. }

返回值

  1. <?PHP
  2. // !函数返回值
  3. function arr()
  4. {
  5. return [3, 6, 9];
  6. }
  7. [$a, $b, $c] = arr();
  8. echo ($a + $b + $c);
  9. // !接口开发 函数返回值会转为通用的json格式的数据返回,这样以来就可以和其他的编程语言进行数据交互,例如js与java php python
  10. function login(): string
  11. {
  12. $loginMsg = ['status' => 1, 'msg' => '登录成功!'];
  13. return json_encode($loginMsg, 320);
  14. }
  15. $lgoinMsg = login();
  16. var_dump($lgoinMsg);
  17. var_dump(json_decode($lgoinMsg));

2. 匿名函数、闭包

  1. <?PHP
  2. /*
  3. *特殊形式的函数
  4. * 1.匿名函数(闭包函数)
  5. * 2.回调函数
  6. * 3.递归函数
  7. *
  8. */
  9. // 匿名函数(闭包函数)
  10. $praise = function ($mascot) {
  11. return "每个人都喜欢{$mascot}。<br>";
  12. };
  13. echo $praise('冰敦敦');
  14. // 全局变量是指声明在函数外部的变量,在函数内部访问不到。
  15. // 局部变量是指声明在函数内部的变量,只能在函数内部被访问到。
  16. // 定义全局变量
  17. $mascot1 = '冰敦敦';
  18. $mascot2 = '雪融融';
  19. // 定义函数
  20. function praise()
  21. {
  22. // 下面语句是错误的,无法访问外部变量
  23. // return "每个人都喜欢{$mascot}。<br>";
  24. // 用global访问
  25. global $mascot1;
  26. // 用超全局数组$GLOBALS $_GET $_POST
  27. return "每个人都喜欢{$mascot1}和{$GLOBALS['mascot2']}。<br>";
  28. }
  29. echo praise();
  30. // 闭包用关键字use使用全局变量
  31. $praise = function ($city) use ($mascot1, $mascot2) {
  32. return "{$mascot1}和{$mascot2}是{$city}冬奥会的吉祥物。<br>";
  33. };
  34. echo $praise('北京');
  35. // 通过引用传递,闭包可改变变量值
  36. $praise = function ($mascot) use (&$mascot1) {
  37. $mascot1 = $mascot;
  38. };
  39. $praise('熊猫');
  40. echo $mascot1;

3. 回调函数

  • 回调函数:php回调是指在主线程函数执行的过程中,突然跳去执行设置的回调函数,回调函数执行结束后, 再回到主线程处理接下来的流程
  • 匿名函数最通常作为回调函数的参数使用
  • php脚本是单线程,脚本是同步执行的,如果遇到耗时函数将会发生线程阻塞的问题,应该将它改为异步回调的方式执行
  1. <?PHP
  2. // 回调函数
  3. // 定义匿名函数,把数组中的偶数筛选出来,组成一个新数组
  4. $odd = function (array $arr) {
  5. // 遍历数组
  6. for ($i = 0; $i < count($arr); $i++) {
  7. // 判断为偶数,组成新数组
  8. if ($arr[$i] % 2 == 0) {
  9. $newArr[] = $arr[$i];
  10. }
  11. }
  12. return $newArr;
  13. };
  14. $arr = [2, 35, 22, 26, 27, 29, 28, 223, 226, 228, 225, 269, 248, 239, 2310, 2564, 2351, 2258];
  15. // 定义函数,求数组中偶数的各
  16. // 函数第1个参数为函数,第2个参数为数组
  17. function sum(Closure $f, array $arr)
  18. {
  19. return array_sum($f($arr));
  20. }
  21. echo sum($odd, $arr) . '<br>';
  22. // 使用call_user_func()把第一个参数作为回调函数调用,后面是参数
  23. echo 'call_user_func函数' . call_user_func('sum', $odd, $arr) . '<br>';
  24. // 调用匿名函数
  25. var_dump(call_user_func($odd, $arr));
相关推荐
阅读 +