亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

php 5.3 閉包語法介紹 function() use() {}

2024-09-04 11:48:16
字體:
來源:轉載
供稿:網友

PHP 5.3 加入了閉包語法,也就是匿名函數,允許開發者申明行內函數和在變量中保存.雖然這個語法和JavaScript的閉包相比有點怪異,但是對于PHP語言來說,這是一個良好的補充.

實例代碼如下:

  1. <?php 
  2. /** 
  3. * 下面提到的代碼在PHP5.3以上版本運行通過. 
  4. */ 
  5. function callback($callback) { 
  6. $callback(); 
  7. //輸出: This is a anonymous function.<br />/n 
  8. //這里是直接定義一個匿名函數進行傳遞, 在以往的版本中, 這是不可用的. 
  9. //現在, 這種語法非常舒服, 和javascript語法基本一致, 之所以說基本呢, 需要繼續向下看 
  10. //結論: 一個舒服的語法必然會受歡迎的. 
  11. callback(function() { 
  12. print "This is a anonymous function.<br />/n"
  13. }); 
  14. //輸出: This is a closure use string value, msg is: Hello, everyone.<br />/n 
  15. //這里首先定義了一個閉包, 這次戶口本上有名字了... 
  16. //use, 一個新鮮的家伙... 
  17. //眾所周知, 閉包: 內部函數使用了外部函數中定義的變量. 
  18. //在PHP新開放的閉包語法中, 我們就是用use來使用閉包外部定義的變量的. 
  19. //這里我們使用了外部變量$msg, 定義完之后, 又對其值進行了改變, 閉包被執行后輸出的是原始值 
  20. //結論: 以傳值方式傳遞的基礎類型參數, 閉包use的值在閉包創建是就確定了. 
  21. $msg = "Hello, everyone"
  22. $callback = function () use ($msg) { 
  23. print "This is a closure use string value, msg is: $msg. <br />/n"
  24. }; 
  25. $msg = "Hello, everybody"
  26. callback($callback); 
  27. //輸出: This is a closure use string value lazy bind, msg is: Hello, everybody.<br />/n 
  28. //換一種引用方式, 我們使用引用的方式來use 
  29. //可以發現這次輸出是閉包定義后的值... 
  30. //這個其實不難理解, 我們以引用方式use, 那閉包use的是$msg這個變量的地址 
  31. //當后面對$msg這個地址上的值進行了改變之后, 閉包內再輸出這個地址的值時, 自然改變了. 
  32. $msg = "Hello, everyone"
  33. $callback = function () use (&$msg) { 
  34. print "This is a closure use string value lazy bind, msg is: $msg. <br />/n"
  35. }; 
  36. $msg = "Hello, everybody"
  37. callback($callback); 
  38. //輸出: This is a closure use object, msg is: Hello, everyone.<br />/n 
  39. //閉包中輸出的是之前被拷貝的值為Hello, everyone的對象, 后面是對$obj這個名字的一個重新賦值. 
  40. //可以這樣考慮 
  41. //1. obj是對象Hello, everyone的名字 
  42. //2. 對象Hello, everyone被閉包use, 閉包產生了一個對Hello, everyone對象的引用 
  43. //3. obj被修改為Hello, everybody這個對象的名字 
  44. //4. 注意, 是名字obj代表的實體變了, 而不是Hello, everyone對象, 那自然閉包的輸出還是前面的Hello, everyone 
  45. $obj = (object) "Hello, everyone"
  46. $callback = function () use ($obj) { 
  47. print "This is a closure use object, msg is: {$obj->scalar}. <br />/n"
  48. }; 
  49. $obj = (object) "Hello, everybody"
  50. callback($callback); 
  51. //輸出: This is a closure use object, msg is: Hello, everybody.<br />/n 
  52. //還是按照上面的步驟, 按部就班的來吧: 
  53. //1. obj名字指向Hello, everyone對象 
  54. //2. 閉包產生一個引用指向Hello, everyone對象 
  55. //3. 修改obj名字指向的對象(即Hello, everyone對象)的scalar值 
  56. //4. 執行閉包, 輸出的自然是Hello, everybody, 因為其實只有一個真正的對象 
  57. $obj = (object) "Hello, everyone"
  58. $callback = function () use ($obj) { 
  59. print "This is a closure use object, msg is: {$obj->scalar}. <br />/n"
  60. }; 
  61. $obj->scalar = "Hello, everybody"
  62. callback($callback); 
  63. //輸出: This is a closure use object lazy bind, msg is: Hello, everybody.<br />/n 
  64. //閉包引用的是什么呢? &$obj, 閉包產生的引用指向$obj這個名字所指向的地址. 
  65. //因此, 無論obj怎么變化, 都是逃不脫的.... 
  66. //所以, 輸出的就是改變后的值 
  67. $obj = (object) "Hello, everyone"
  68. $callback = function () use (&$obj) { 
  69. print "This is a closure use object lazy bind, msg is: {$obj->scalar}. <br />/n"
  70. }; 
  71. $obj = (object) "Hello, everybody"
  72. callback($callback); 
  73. /** 
  74. * 一個利用閉包的計數器產生器 
  75. * 這里其實借鑒的是python中介紹閉包時的例子... 
  76. * 我們可以這樣考慮: 
  77. *         1. counter函數每次調用, 創建一個局部變量$counter, 初始化為1. 
  78. *         2. 然后創建一個閉包, 閉包產生了對局部變量$counter的引用. 
  79. *         3. 函數counter返回創建的閉包, 并銷毀局部變量, 但此時有閉包對$counter的引用, 
  80. *             它并不會被回收, 因此, 我們可以這樣理解, 被函數counter返回的閉包, 攜帶了一個游離態的 
  81. *             變量. 
  82. *         4. 由于每次調用counter都會創建獨立的$counter和閉包, 因此返回的閉包相互之間是獨立的. 
  83. *         5. 執行被返回的閉包, 對其攜帶的游離態變量自增并返回, 得到的就是一個計數器. 
  84. * 結論: 此函數可以用來生成相互獨立的計數器. 
  85. */ 
  86. function counter() { 
  87. $counter = 1; 
  88. return function() use(&$counter) {return $counter ++;}; 
  89. $counter1 = counter(); 
  90. $counter2 = counter(); 
  91. echo "counter1: " . $counter1() . "<br />/n"
  92. echo "counter1: " . $counter1() . "<br />/n"
  93. echo "counter1: " . $counter1() . "<br />/n"
  94. echo "counter1: " . $counter1() . "<br />/n"
  95. echo "counter2: " . $counter2() . "<br />/n"
  96. echo "counter2: " . $counter2() . "<br />/n"
  97. echo "counter2: " . $counter2() . "<br />/n"
  98. echo "counter2: " . $counter2() . "<br />/n"
  99. ?> 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品女视频| 91九色综合久久| 98精品国产自产在线观看| 在线播放国产精品| 日韩av在线导航| 日韩av三级在线观看| 日韩高清av一区二区三区| 久久99久久99精品中文字幕| 亚洲国产中文字幕久久网| 伊人伊成久久人综合网站| 久久精品99久久久香蕉| 亚洲成人黄色在线| 亚洲经典中文字幕| 性色av一区二区三区免费| 亚洲缚视频在线观看| 亚洲精品电影网| 国产精品久久久av久久久| 8090成年在线看片午夜| 97热在线精品视频在线观看| 久久噜噜噜精品国产亚洲综合| 日韩av中文字幕在线播放| 91极品视频在线| 中文字幕视频一区二区在线有码| 亚洲精品久久久久久久久久久| 日韩精品极品在线观看| 欧美在线观看网址综合| 国产一区二区三区精品久久久| 在线观看亚洲区| 亚洲女成人图区| 久久久精品免费视频| 一区二区三区视频免费| 国产精品一区专区欧美日韩| 狠狠综合久久av一区二区小说| 久久999免费视频| 91久久精品在线| 国产69精品久久久久9| 欧美体内谢she精2性欧美| 欧美理论电影网| 日本伊人精品一区二区三区介绍| 亚洲欧美制服综合另类| 日韩精品亚洲精品| 最新的欧美黄色| 精品日本美女福利在线观看| 国产亚洲精品久久久优势| 欧美在线欧美在线| 久久久久在线观看| 91久久精品久久国产性色也91| 精品国产电影一区| 日韩av在线免费播放| 久久人人爽人人爽人人片亚洲| 精品国内产的精品视频在线观看| 久久精品色欧美aⅴ一区二区| 欧美另类高清videos| 久久久久免费视频| 92福利视频午夜1000合集在线观看| 日韩成人中文电影| 欧美一级黑人aaaaaaa做受| 国产精品视频内| 在线性视频日韩欧美| 成人免费直播live| 久久精品国产久精国产思思| 欧美日韩999| 中文字幕欧美日韩精品| 97视频国产在线| 4438全国亚洲精品在线观看视频| 黑人巨大精品欧美一区二区三区| 国产精品久久久久久久av大片| 一区二区三区视频观看| 97香蕉久久超级碰碰高清版| 精品伊人久久97| 国产在线观看精品| 97视频免费看| 国产一区二区三区在线免费观看| 国产日本欧美在线观看| 国产精品日日摸夜夜添夜夜av| 国产精品一区二区av影院萌芽| 国产精品网站视频| 欧美日韩亚洲91| 日韩av免费在线看| 欧美肥老太性生活视频| 国产成人综合精品| 成人午夜两性视频| 91老司机在线| 亚洲片国产一区一级在线观看| 欧美激情视频给我| 欧美久久精品一级黑人c片| 91日韩在线播放| 亚洲人a成www在线影院| 亚洲精品美女在线观看| 欧美丰满少妇xxxxx| 国产精品美女午夜av| 国产精品白嫩初高中害羞小美女| 亚洲精品456在线播放狼人| 亚洲无线码在线一区观看| 亚洲一区二区三| 欧美成人午夜激情在线| 欧美孕妇孕交黑巨大网站| 在线日韩中文字幕| 在线观看国产精品日韩av| 久久精品视频在线播放| 欧美在线视频播放| 国产精品成人va在线观看| 亚洲高清不卡av| 久久久亚洲天堂| 欧美网站在线观看| 91色琪琪电影亚洲精品久久| 国产成人综合精品在线| 欧美激情精品久久久久久大尺度| 亚洲欧洲一区二区三区久久| 亚洲最大激情中文字幕| 国产欧美一区二区三区久久人妖| 亚洲成人黄色在线观看| 日韩精品极品视频| 国产精品久久久久77777| 55夜色66夜色国产精品视频| 91久久精品国产| 欧美激情一区二区三区在线视频观看| 亚洲日韩第一页| 欧美性感美女h网站在线观看免费| 亚洲香蕉成视频在线观看| 91亚洲国产成人精品性色| 亚洲天堂av在线播放| 91国产一区在线| 国产欧美日韩精品专区| 成人激情视频在线播放| 亚洲视频免费一区| 亚洲男女自偷自拍图片另类| 久久精品视频99| 亚洲乱码av中文一区二区| 久久久久久国产免费| 欧美整片在线观看| 伊人亚洲福利一区二区三区| 日韩av影视综合网| 91精品国产亚洲| 精品视频久久久久久久| 日韩精品视频三区| 免费不卡欧美自拍视频| 成人性生交大片免费观看嘿嘿视频| 亚洲天堂男人的天堂| 国产人妖伪娘一区91| 欧美精品videos另类日本| 在线日韩精品视频| 最近2019中文字幕大全第二页| 国产精品黄色av| 亚洲精品永久免费| 色综合天天综合网国产成人网| 中文字幕亚洲自拍| 久久人人爽人人| 国产一区二区免费| 精品人伦一区二区三区蜜桃免费| 亚洲成avwww人| 国内免费久久久久久久久久久| 国产美女久久久| 色综合视频一区中文字幕| 亚洲精品国产拍免费91在线| 亚洲国产精品va在线看黑人| 欧美肥婆姓交大片| 日本成人在线视频网址| 亚洲精品在线观看www| 亚洲精品久久久久久久久久久久| 不卡毛片在线看| 日韩av有码在线| 日韩乱码在线视频| 亚洲新中文字幕|