Blogger Information
Blog 46
fans 0
comment 0
visits 39576
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
全面演示: 函数的作用域与闭包,回调的使用场景以及函数的多值返回方式
lus菜
Original
658 people have browsed it

函数的作用域与闭包:

样式代码:

  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);

效果预览:

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post