登录  /  注册
博主信息
博文 46
粉丝 0
评论 0
访问量 37172
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
全面演示: 函数的作用域与闭包,回调的使用场景以及函数的多值返回方式
lus菜
原创
626人浏览过

函数的作用域与闭包:

样式代码:

  1. // 声明在函数外部的成员,默认就是全局成员
  2. $laos = '后端老师';
  3. $youx = '0121223154@qq.com';
  4. function index1(): string
  5. {
  6. // 函数作用域: 只有调用它的时候才会创建
  7. $dsw= '';
  8. // 1. global 访问全局/外部的成员
  9. global $laos;
  10. $dsw .= 'laos = ' . $laos . '<br>';
  11. // 2. $GLOBALS 超全局数组
  12. $dsw .= 'youx = ' . $GLOBALS['youx'] . '<br>';
  13. return $dsw;
  14. }
  15. echo index1(),'<hr>';
  16. // 2. 闭包: 匿名函数 闭包: 可以访问函数外部的自由变量/父作用域中的变量
  17. $bbao2 = function () use ($laos, $youx) {
  18. return sprintf('laos = %s<br>youx = %s<br>', $laos, $youx);
  19. };
  20. echo $bbao2(),'<hr>';
  21. // 闭包支持引用传参: 参数前加&
  22. echo '当前: laos = ' . $laos . '<br>';
  23. $gb3 = function ($mylaos) use (&$laos) {
  24. // 闭包中将引用参数更新后,会实时的映射到外部的原始条件中
  25. $laos = $mylaos;
  26. };
  27. $gb3('前端老师');
  28. echo '现在: laos = ' . $laos . '<br>';
  29. // 闭包经常用作函数的返回值
  30. function bbhs4($site)
  31. {
  32. // 返回一组函数,闭包最佳使用场景
  33. return function ($color) use ($site) {
  34. return sprintf('<h3 style="color:%s">%s</h3>', $color,$site);
  35. };
  36. }
  37. // 高阶函数: 柯里化
  38. echo bbhs4('提交作业完成')('violet');

效果预览:

回调的使用场景:

  1. php单选程,同步执行,如果遇到耗时函数会发生阻塞,应该将它改为异步回调执行

样式代码:

  1. // 回调方法
  2. function index1(string $name) : string
  3. {
  4. return "Hello waayou $name !";
  5. }
  6. // 传统
  7. echo index1('早上好'), '<hr>';
  8. // call_user_func(函数, 参数列表)
  9. echo call_user_func('index1','中午好'), '<hr>';
  10. // call_user_func_array(函数, [参数数组])
  11. echo call_user_func_array('index1',['晚上好']), '<hr>';
  12. // 这二个函数还可以异步的调用对象方法
  13. class User
  14. {
  15. // 实例方法
  16. public function hello(string $name) : string
  17. {
  18. return "Hello waayou $name !";
  19. }
  20. // 静态方法: 类调用
  21. public static function say(string $site) : string
  22. {
  23. return "上班要打卡 $site !";
  24. }
  25. }
  26. // 实例方法
  27. $xqh = call_user_func_array([new User, 'hello'], ['编程老师']);
  28. echo $xqh,'<hr>';
  29. // 静态方法
  30. $xqh = call_user_func_array('User::say', ['不能早退']);
  31. echo $xqh, '<br>';

效果预览:

演示函数的多值返回类型方式,重点是json:

样式代码:

  1. <?php
  2. // 1. 数组
  3. function index1(): array
  4. {
  5. return ['zsygzy' => 11, 'tijiaozy' => '提交成功'];
  6. }
  7. $szy = index1();
  8. echo $szy['zsygzy'] === 1 ? $szy['tijiaozy'] : '提交失败.....';
  9. echo '<hr>';
  10. // 2. 对象
  11. function index2() : object
  12. {
  13. return new class ()
  14. {
  15. public $email = '邮箱';
  16. public $passow = '密码';
  17. };
  18. }
  19. $user = index2();
  20. printf('email = %s<br>passow = %s<br>', $user->email, $user->passow);
  21. echo '<hr>';
  22. // 3. 序列化的字符串
  23. function index3(): string
  24. {
  25. return serialize(['email' => 1, 'passow' => '验证通过']);
  26. }
  27. $xlh = index3();
  28. echo $xlh,'<hr>';
  29. // 在php中使用时要还原成原来的类型
  30. $arr = unserialize($xlh);
  31. echo var_dump($arr),'<hr>';
  32. // 4. 转为通用的json格式的字符串
  33. function index4(): string
  34. {
  35. return json_encode(['email' => 2, 'passow' => '验证通过'], JSON_UNESCAPED_UNICODE);
  36. }
  37. $xlh = index4();
  38. $str = json_decode($xlh);
  39. echo var_dump($str),'<hr>';
  40. // 默认将外部的json解析成object对象类型
  41. printf('email = %s<br>passow = %s<hr>',$user->email, $user->passow);

效果预览:

批改老师:天蓬老师天蓬老师

批改状态:合格

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

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

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