Blogger Information
Blog 70
fans 1
comment 0
visits 52980
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
函数作用域与闭包-回调与参数-函数多值返回类型方式
葡萄枝子
Original
619 people have browsed it

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

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

多值返回

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