当前位置:首页 > PHP教程 > php高级应用 > 列表

php什么时候使用闭包

发布:smiling 来源: PHP粉丝网  添加日期:2020-05-02 20:54:49 浏览: 评论:0 

php中的闭包的使用场景有:在动态调用静态类时,在callback函数中使用,赋值给一个普通的变量,使用use从父域中继承以及传递参数时

闭包函数

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

使用场景

动态调用静态类的时候

  1. <?php 
  2.  
  3. class test 
  4.  
  5.  
  6.     public static function getinfo() 
  7.  
  8.     { 
  9.  
  10.         var_dump(func_get_args()); 
  11.  
  12.     } 
  13.  
  14.  
  15. call_user_func(array('test''getinfo'), 'hello world'); 

在callback函数中使用

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

赋值给一个普通的变量

  1. <?php 
  2.  
  3. $greet = function($name
  4.  
  5.  
  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. // 继承 $message 
  6.  
  7. $example = function () use ($message) { 
  8.  
  9.     var_dump($message); 
  10.  
  11. }; 
  12.  
  13. echo $example(); 
  14.  
  15. // Inherit by-reference 
  16.  
  17. $example = function () use (&$message) { 
  18.  
  19.     var_dump($message); 
  20.  
  21. }; 
  22. //phpfensi.com 
  23. echo $example(); 
  24.  
  25. // The changed value in the parent scope 
  26.  
  27. // is reflected inside the function call 
  28.  
  29. $message = 'world'
  30.  
  31. echo $example(); 

传递参数

  1. <?php 
  2.  
  3. $example = function ($arguse ($message) { 
  4.  
  5.     var_dump($arg . ' ' . $message); 
  6.  
  7. }; 
  8.  
  9. $example("hello"); 

OO中的使用

  1. <?php 
  2.  
  3. class factory{ 
  4.  
  5.     private $_factory
  6.  
  7.     public function set($id,$value){ 
  8.  
  9.         $this->_factory[$id] = $value
  10.  
  11.     }    
  12.  
  13.     public function get($id){ 
  14.  
  15.         $value = $this->_factory[$id]; 
  16.  
  17.         return $value(); 
  18.  
  19.     } 
  20.  
  21.  
  22. class User{ 
  23.  
  24.     private $_username
  25.  
  26.     function __construct($username="") { 
  27.  
  28.         $this->_username = $username
  29.  
  30.     } 
  31.  
  32.     function getUserName(){ 
  33.  
  34.         return $this->_username; 
  35.  
  36.     } 
  37.  
  38. }  
  39.  
  40. $factory = new factory(); 
  41.  
  42. $factory->set("zhangsan",function(){ 
  43.  
  44.     return new User('张三'); 
  45.  
  46. }); 
  47.  
  48. $factory->set("lisi",function(){ 
  49.  
  50.    return new User("李四"); 
  51.  
  52. }); 
  53.  
  54. echo $factory->get("zhangsan")->getUserName(); 
  55.  
  56. echo $factory->get("lisi")->getUserName(); 

函数中的调用

  1. <?php 
  2.  
  3. function call($callback){ 
  4.  
  5.             $callback(); 
  6.  
  7.     } 
  8.  
  9. call(function() { 
  10.  
  11.     var_dump('hell world'); 
  12.  
  13. }); 

Tags: php闭包

分享到: