You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
2.2 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. <?php
  2. /**
  3. * 函数内部的无名函数
  4. * 与普通函数一样有返回值
  5. * 可以作为一个变量值使用
  6. * 常用于做回调函数的参数
  7. * 把匿名函数当成一个对象
  8. */
  9. //1 匿名函数作为变量值
  10. $a = function(){
  11. echo 'hello'.PHP_EOL;
  12. return "这是匿名函数的返回值";
  13. };
  14. $a();
  15. echo $a().PHP_EOL; //output:会执行函数里的代码,并且返回返回值
  16. //2 匿名函数的参数
  17. $b=function($var){
  18. echo $var.PHP_EOL;
  19. return "返回".$var;
  20. };
  21. $b("匿名函数的参数");
  22. echo $b("匿名函数的参数").PHP_EOL;
  23. //2 匿名函数作为函数里的函数
  24. function func(){
  25. $b='父类中的变量';
  26. //wrong output:Undefined variable: b
  27. // $innerFunc = function(){
  28. // //调用函数func的局部变量
  29. // echo $b;
  30. // };
  31. //3 匿名函数调用父类中的变量
  32. $innerFunc = function() use ($b){
  33. echo "调用".$b.PHP_EOL;
  34. };
  35. //调用匿名函数
  36. $innerFunc();
  37. }
  38. func();
  39. //匿名函数作为参数,回调函数
  40. //array_map(?callable $callback, array $array, array ...$arrays): array
  41. //数组$array中的元素依次赋值到匿名函数中的$num
  42. $arr=[1,2,3,4];
  43. $ret = array_map(
  44. function($num){
  45. return $num * $num;
  46. },
  47. $arr);
  48. print_r($ret);
  49. //静态匿名函数
  50. //匿名函数允许被定义为静态化。这样可以防止当前类自动绑定到它们身上,对象在运行时也可能不会被绑定到它们上面。
  51. //不是很理解这句话
  52. //在类中的匿名函数,不带static
  53. class ClassA
  54. {
  55. public $a = 3;
  56. function __construct()
  57. {
  58. $func = function(){
  59. echo $this->a.PHP_EOL;
  60. };
  61. $func();
  62. }
  63. }
  64. $obj=new ClassA();
  65. //带static的匿名函数
  66. class ClassB
  67. {
  68. public $a=4;
  69. function __construct() {
  70. $func=static function(){echo $this->a.PHP_EOL;}; //wrong output:Using $this when not in object context
  71. $func();
  72. }
  73. }
  74. $obj2=new ClassB();
  75. ?>