登录  /  注册
博主信息
博文 77
粉丝 0
评论 0
访问量 76115
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
函数参数类型,匿名函数、箭头函数、回调函数、递归函数的理解
Jet的博客
原创
739人浏览过

一、函数参数类型

函数声明:

  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. // 递归函数是指直接或者间接的调用函数自身的函数

批改老师:PHPzPHPz

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学