PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

博客列表 > 函数参数类型,匿名函数、箭头函数、回调函数、递归函数的理解

函数参数类型,匿名函数、箭头函数、回调函数、递归函数的理解

Jet的博客
Jet的博客 原创
2023年03月19日 17:48:22 508浏览

一、函数参数类型

函数声明:

  1. function sum(int $left, int $right) : string
  2. {
  3. return $left + $right;
  4. };

函数调用

  1. var_dump(sum(1, 2));

printf、sprintf、vprintf、vsprintf

  1. // printf:返回 打印
  2. printf('<div style="color:red">%s</div>','php中文网');
  3. // sprintf:只返回不打印
  4. echo sprintf('<div style="color:red">%s</div>','php中文网');
  5. // vprintf:打印数组参数
  6. function sum1(int $left, int $right) : string
  7. {
  8. return vprintf("%d + %d = %d", [$left,$right, $left + $right]);
  9. }
  10. sum1(2,3);
  11. // vsprintf:只返回不打印

1.1、默认参数

  1. if (!function_exists('sum2')) {
  2. function sum2(int $left, int $right, int $center = 10) : int
  3. {
  4. return array_sum([$left, $right, $center]);
  5. }
  6. };
  7. // 3.1 参数太少,使用默认参数
  8. echo sum2(20,30) . "\n";
  9. echo sum2(20,30,5) . "\n";

1.2、数组参数

参数过多或者不确认参数个数,在参数前面加...标识为可变参

  1. function foo($arr, ...$arrs)
  2. {
  3. var_dump($arr, $arrs);
  4. }
  5. foo(1,2,3,4,5,6);
  6. function boo(...$arrs)
  7. {
  8. var_dump(func_get_args());
  9. }
  10. boo(10,20,33,218,98);

1.3、命名参数,php8.0以上使用

  1. function sum3(int $left, int $right, int $center = 10, $good = 20) : int
  2. {
  3. return array_sum([$left, $right, $center,$good]);
  4. }
  5. echo sum3( 1, 2, good:40);


1.4、引用参数

  1. function hoo($a)
  2. {
  3. return $a += 10;
  4. }
  5. // 值传递
  6. $a = 20;
  7. echo hoo($a) . "<br />";
  8. echo $a . "<br />";
  9. // 引用传递
  10. $c = 50;
  11. $d = &$c;
  12. echo $d . "<br />";
  13. $c = 60;
  14. echo $d . "<br />";
  15. $d = 30;
  16. echo $c;


1.5、返回值和返回数组

  1. // 返回值 return:返回单一值
  2. // 返回数组 json字符串
  3. function fn1()
  4. {
  5. // return 1;
  6. // return 1 !== 1;
  7. return ['admin', 'admin@php.cn'];
  8. }
  9. // true 1 false ''
  10. //echo fn1();
  11. list($name, $email) = fn1();
  12. echo $name . ' : ' . $email;


二、匿名函数、箭头函数、回调函数、递归函数

2.1、匿名函数

  1. // 1. 匿名函数 Closure类
  2. $b = 1;
  3. $boo = function ($a) use ($b) {
  4. echo $a + $b . "<br />";
  5. };
  6. $boo(3);
  7. $boo(6);


2.2、箭头函数

箭头函数会自动捕获父作用域遍历进行值拷贝

  1. $x = 1;
  2. $fn1 = fn($a, $b) => $a + $b + $x; //省略的时return
  3. echo $fn1(10,20);


2.3、回调函数

test.php文件

  1. <?php
  2. function boo(...$args) {
  3. return array_sum($args);
  4. }
  5. boo(15,25,111,289,157);

demo.php文件

// 在主进程执行的过程中,突然跳转到预先设置好的函数中区执行的函数
// php单线程,同步执行,如果遇到耗时函数会发生阻塞,应该将它改为异步回调执行

  1. require 'test.php';
  2. // 传统调用一个命名函数
  3. echo boo(15,25,111,289,157) . "<br />";

2.3.1、回调一个命名函数

call_user_func() call_user_func_array()
调用回调函数,并把一个数组参数作为回调函数的参数

  1. echo call_user_func('boo',...[15,25,111,289,157]) . "<br />";
  2. echo call_user_func_array('boo',[15,25,111,289,157]);

  1. function insert($i){
  2. echo "插入数据{$i}<br />";
  3. return true;
  4. }
  5. $arr = range(1,10);
  6. function action($arr, $function){
  7. foreach ( $arr as $key => $value ) {
  8. if($value % 2 == 0){
  9. call_user_func($function , $value);
  10. }
  11. }
  12. }
  13. action($arr, 'insert');

2.3.2、回调匿名函数

  1. function action2(array $arr, callable $function){
  2. foreach ( $arr as $key => $value ) {
  3. if ( $value % 2 == 0 ) {
  4. call_user_func($function, $value);
  5. }
  6. }
  7. }
  8. $loo = function($i){
  9. echo "插入数据{$i}<br />";
  10. return true;
  11. };
  12. action2($arr, $loo);


2.4、递归函数的理解

  1. function demo($a=1)
  2. {
  3. if($a<=5)
  4. {
  5. echo "第{$a}此执行的结果<br />";
  6. $a++;
  7. demo($a);
  8. }
  9. }
  10. demo();
  1. // 递归函数:具有递归功能的函数
  2. // 递归函数是指直接或者间接的调用函数自身的函数

上一条: felx布局实现登陆页面 下一条: 用户注册表
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议