首页 > 语言 > PHP > 正文

详解PHP匿名函数与注意事项

2024-09-04 11:49:34
字体:
来源:转载
供稿:网友

php5.3不但引进了匿名函数还有更多更好多新的特性了,下面我们一起来了解一下PHP匿名函数与注意事项,具体内容如下

PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束

PHP5.2:JSON 支持

PHP5.3:弃用的功能,匿名函数,新增魔术方法,命名空间,后期静态绑定,Heredoc 和 Nowdoc, const, 三元运算符,Phar

PHP5.4:Short Open Tag, 数组简写形式,Traits, 内置 Web 服务器,细节修改

PHP5.5:yield, list() 用于 foreach, 细节修改

PHP5.6:常量增强,可变函数参数,命名空间增强

现在基本上都使用PHP5.3以后的版本,但是感觉普遍一个现象就是很多新特性,过了这么长时间,还没有完全普及,在项目中很少用到。

看看PHP匿名函数:

  1. 'test' => function(){ 
  2.  
  3.   return 'test' 
  4.  
  5. }, 

PHP匿名函数的定义很简单,就是给一个变量赋值,只不过这个值是个function。

以上是使用Yii框架配置components文件,加了一个test的配置。

什么是PHP匿名函数?

看官方解释:

匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。

匿名函数示例:

  1. <?php 
  2.  
  3. echo preg_replace_callback('~-([a-z])~'function ($match) { 
  4.  
  5.  return strtoupper($match[1]); 
  6.  
  7. }, 'hello-world'); 
  8.  
  9. // 输出 helloWorld 
  10.  
  11. ?> 

闭包函数也可以作为变量的值来使用。PHP 会自动把此种表达式转换成内置类 Closure 的对象实例。把一个 closure 对象赋值给一个变量的方式与普通变量赋值的语法是一样的,最后也要加上分号:

匿名函数变量赋值示例:

  1. <?php 
  2.  
  3. $greet = function($name
  4.  
  5. //Vevb.com 
  6.  printf("Hello %s/r/n"$name); 
  7.  
  8. }; 
  9.  
  10. $greet('World'); 
  11.  
  12. $greet('PHP'); 
  13.  
  14. ?> 

闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去。

从父作用域继承变量

  1. <?php 
  2.  
  3. $message = 'hello' 
  4.  
  5. // 没有 "use" 
  6.  
  7. $example = function () { 
  8.  
  9.  var_dump($message); 
  10.  
  11. }; 
  12.  
  13. echo $example(); 
  14.  
  15. // 继承 $message 
  16.  
  17. $example = function () use($message) { 
  18.  
  19.  var_dump($message); 
  20.  
  21. }; 
  22.  
  23. echo $example(); 
  24.  
  25. // Inherited variable's value is from when the function 
  26.  
  27. // is defined, not when called 
  28.  
  29. $message = 'world'echo $example(); 
  30.  
  31. // Reset message 
  32.  
  33. $message = 'hello' 
  34.  
  35. // Inherit by-reference 
  36.  
  37. $example = function () use(&$message) { 
  38.  
  39.  var_dump($message); 
  40.  
  41. }; 
  42.  
  43. echo $example(); 
  44.  
  45. // The changed value in the parent scope 
  46.  
  47. // is reflected inside the function call 
  48.  
  49. $message = 'world'echo $example(); 
  50.  
  51. // Closures can also accept regular arguments 
  52.  
  53. $example = function ($arguse($message) { 
  54.  
  55.  var_dump($arg . ' ' . $message); 
  56. //Vevb.com 
  57. }; 
  58.  
  59. $example("hello"); 
  60.  
  61. ?> 

php中的匿名函数的注意事项

在php5.3以后,php加入匿名函数的使用,今天在使用匿名的时候出现错误,不能想php函数那样声明和使用,详细看代码:

  1. $callback=function(){  
  2.  
  3.  return "aa";  
  4.  
  5. };  
  6.  
  7. echo $callback();  

打印出来是aa;

看下面的例子:

  1. echo $callback();  
  2.  
  3. $callback=function(){  
  4.  
  5.  return "aa";  
  6.  
  7. }; 

这时报错了!$callback为未声明,但是使用php自己声明的函数都不会报错的!

  1. function callback(){  
  2.  
  3.  return "aa";  
  4.  
  5. }  
  6.  
  7. echo callback(); //aa  
  8.  
  9. //Vevb.com 
  10. echo callback(); //aa  
  11.  
  12. function callback(){  
  13.  
  14.  return "aa";  
  15.  
  16. }  

这两个都打印出来aa;

在使用匿名函数的时候,匿名函数当做变量,须提前声明,js中也是这样的!!!!!

以上就是为大家介绍的PHP匿名函数与注意事项,希望对大家的学习有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表