当前位置:首页 > 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.  
  7.     public static function getinfo() 
  8.  
  9.     { 
  10.  
  11.         var_dump(func_get_args()); 
  12.  
  13.     } 
  14.  
  15. } 
  16.  
  17. 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.  
  7.     printf("Hello %s\r\n", $name); 
  8.  
  9. }; 
  10.  
  11. $greet('World'); 
  12.  
  13. $greet('PHP'); 
  14.  
  15. ?> 

使用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 ($arg) use ($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.  
  23. class User{ 
  24.  
  25.     private $_username; 
  26.  
  27.     function __construct($username="") { 
  28.  
  29.         $this->_username = $username; 
  30.  
  31.     } 
  32.  
  33.     function getUserName(){ 
  34.  
  35.         return $this->_username; 
  36.  
  37.     } 
  38.  
  39. }  
  40.  
  41. $factory = new factory(); 
  42.  
  43. $factory->set("zhangsan",function(){ 
  44.  
  45.     return new User('张三'); 
  46.  
  47. }); 
  48.  
  49. $factory->set("lisi",function(){ 
  50.  
  51.    return new User("李四"); 
  52.  
  53. }); 
  54.  
  55. echo $factory->get("zhangsan")->getUserName(); 
  56.  
  57. 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闭包

分享到: