博客列表 >函数作用域与闭包-回调与参数-函数多值返回类型方式

函数作用域与闭包-回调与参数-函数多值返回类型方式

葡萄枝子
葡萄枝子原创
2021年01月28日 23:55:58618浏览

函数作用域与闭包-回调与参数-函数多值返回类型方式

  1. 实例演示函数作用域与闭包,回调的使用场景与参数调用;
  2. 实例演示函数的多值返回类型方式,重点是json

1. 实例演示函数作用域与闭包,回调的使用场景与参数调用;

1.1 实例演示函数作用域与闭包

  1. // 实例演示函数作用域与闭包
  2. // 函数内部访问外部变量
  3. $a = 1;
  4. $b = 2;
  5. $c = 3;
  6. // global 访问外部变量
  7. function fa() {
  8. global $a;
  9. return $a;
  10. }
  11. // 显示 1
  12. echo fa(), '<br>';
  13. // 全局变量 $GLOBALS 访问
  14. function foo() {
  15. return $GLOBALS['b'];
  16. }
  17. // 显示 2
  18. echo foo(), '<br>';
  19. // 匿名函数闭包 closure 访问
  20. $par = function() use( $c ) {
  21. return $c;
  22. };
  23. // 显示 3
  24. echo $par(), '<br>';
  25. // 函数内使用 closure 闭包
  26. function par($a, $b) {
  27. $sum = function($sum) use ($a, $b) {
  28. return "$sum = $a + $b = ". ($a + $b);
  29. };
  30. return $sum;
  31. }
  32. // 显示 sum = 1 + 2 = 3
  33. echo par($a, $b)('sum'), '<br>';
  34. echo '<br>';

函数作用域与闭包

1.2 回调的使用场景与参数调用

  • 回调的使用场景:php单线程同步执行,遇到耗时函数阻塞,可以改为回调函数异步执行
  1. // 函数回调的参数调用
  2. function cb($a, $b, $c) {
  3. return "$a + $b = $c : ". var_export($a + $b === $c, true);
  4. }
  5. // 传入参数列表
  6. // 显示 1 + 2 = 3 : true
  7. echo call_user_func('cb', 1, 2, 3), '<br>';
  8. // 传入数组参数
  9. // 显示 2 + 3 = 4 : false
  10. echo call_user_func_array('cb', [2, 3, 4]), '<br>';
  11. echo '<br>';
  12. // 对象回调的参数调用
  13. class Obj {
  14. // 静态方法
  15. public static function fa($a) {
  16. return "fa: $a";
  17. }
  18. // 公开方法
  19. public function foo($b) {
  20. return "foo: $b";
  21. }
  22. }
  23. // 类的实例化
  24. $obj = new Obj();
  25. // 传入参数列表
  26. // 访问静态方法 fa
  27. // fa: 1
  28. echo call_user_func([$obj, 'fa'], 1), '<br>';
  29. // fa: 2
  30. echo call_user_func(['Obj', 'fa'], 2), '<br>';
  31. // fa: 3
  32. echo call_user_func('Obj::fa', 3), '<br>';
  33. echo '<br>';
  34. // 访问公开方法 foo
  35. // foo: 4
  36. echo call_user_func([$obj, 'foo'], 4), '<br>';
  37. echo '<br>';
  38. // 传入参数数组
  39. // 访问静态方法 fa
  40. // fa: 1
  41. echo call_user_func_array([$obj, 'fa'], [1]), '<br>';
  42. // fa: 2
  43. echo call_user_func_array(['Obj', 'fa'], [2]), '<br>';
  44. // fa: 3
  45. echo call_user_func_array('Obj::fa', [3]), '<br>';
  46. echo '<br>';
  47. // 访问公开方法 foo
  48. // foo: 4
  49. echo call_user_func_array([$obj, 'foo'], [4]), '<br>';
  50. echo '<br>';

回调

2. 实例演示函数的多值返回类型方式,重点是json

  1. // 函数的多值返回
  2. function multi(...$args) {
  3. if (!empty($args)) {
  4. if (!is_string($args[0])) return $args[0];
  5. $type = $args[0];
  6. $prams = array_slice($args, 1);
  7. switch ($type) {
  8. case 'serialize':
  9. return serialize($prams);
  10. case 'json_encode':
  11. return json_encode($prams);
  12. case 'object' :
  13. return (object)$prams;
  14. default:
  15. return $prams;
  16. }
  17. }
  18. return $args;
  19. }
  20. // 返回数组
  21. print_r(multi('array', 1, 2, 3));
  22. echo '<br>';
  23. // 返回对象
  24. print_r(multi('object', 1, 2, 3));
  25. echo '<br>';
  26. // 返回序列化
  27. print_r(multi('serialize', 1, 2, 3));
  28. echo '<br>';
  29. // json_encode
  30. print_r(multi('json_encode', 1, 2, 3));
  31. echo '<br>';

多值返回

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