国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php什么時候使用閉包

2024-05-04 21:51:05
字體:
來源:轉載
供稿:網友

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. //Vevb.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. }); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 正镶白旗| 虹口区| 棋牌| 革吉县| 彝良县| 且末县| 义乌市| 黄平县| 三门县| 利辛县| 景东| 双鸭山市| 介休市| 樟树市| 蒙阴县| 长宁县| 白城市| 古交市| 尉犁县| 江阴市| 阳朔县| 和林格尔县| 仙桃市| 大名县| 友谊县| 临朐县| 若尔盖县| 哈尔滨市| 榕江县| 上饶市| 平远县| 娄烦县| 丹巴县| 天气| 筠连县| 嘉禾县| 德州市| 福贡县| 化德县| 龙口市| 寿宁县|