日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

PHP闭包(Closure)初探(转载 http://my.oschina.net/melonol/blog/126694?p=2#comments)

發(fā)布時(shí)間:2023/12/10 php 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP闭包(Closure)初探(转载 http://my.oschina.net/melonol/blog/126694?p=2#comments) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

匿名函數(shù)

提到閉包就不得不想起匿名函數(shù),也叫閉包函數(shù)(closures),貌似PHP閉包實(shí)現(xiàn)主要就是靠它。聲明一個(gè)匿名函數(shù)是這樣:

?

?
1 2 3 $func = function() { ????? }; //帶結(jié)束符

可以看到,匿名函數(shù)因?yàn)闆]有名字,如果要使用它,需要將其返回給一個(gè)變量。匿名函數(shù)也像普通函數(shù)一樣可以聲明參數(shù),調(diào)用方法也相同:

?

?
1 2 3 4 5 6 7 8 $func = function( $param ) { ????echo $param; }; $func( 'some string' ); //輸出: //some string


順便提一下,PHP在引入閉包之前,也有一個(gè)可以創(chuàng)建匿名函數(shù)的函數(shù):create function,但是代碼邏輯只能寫成字符串,這樣看起來很晦澀并且不好維護(hù),所以很少有人用。

?

實(shí)現(xiàn)閉包

將匿名函數(shù)在普通函數(shù)中當(dāng)做參數(shù)傳入,也可以被返回。這就實(shí)現(xiàn)了一個(gè)簡單的閉包。

下邊有三個(gè)例子

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 //例一 //在函數(shù)里定義一個(gè)匿名函數(shù),并且調(diào)用它 function printStr() { ????$func = function( $str ) { ????????echo $str; ????}; ????$func( 'some string' ); } printStr(); //例二 //在函數(shù)中把匿名函數(shù)返回,并且調(diào)用它 function getPrintStrFunc() { ????$func = function( $str ) { ????????echo $str; ????}; ????return $func; } $printStrFunc = getPrintStrFunc(); $printStrFunc( 'some string' ); //例三 //把匿名函數(shù)當(dāng)做參數(shù)傳遞,并且調(diào)用它 function callFunc( $func ) { ????$func( 'some string' ); } $printStrFunc = function( $str ) { ????echo $str; }; callFunc( $printStrFunc ); //也可以直接將匿名函數(shù)進(jìn)行傳遞。如果你了解js,這種寫法可能會(huì)很熟悉 callFunc( function( $str ) { ????echo $str; } );


?

連接閉包和外界變量的關(guān)鍵字:USE

閉包可以保存所在代碼塊上下文的一些變量和值。PHP在默認(rèn)情況下,匿名函數(shù)不能調(diào)用所在代碼塊的上下文變量,而需要通過使用use關(guān)鍵字。

換一個(gè)例子看看:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 function getMoney() { ????$rmb = 1; ????$dollar = 6; ????$func = function() use ( $rmb ) { ????????echo $rmb; ????????echo $dollar; ????}; ????$func(); } getMoney(); //輸出: //1 //報(bào)錯(cuò),找不到dorllar變量

可以看到,dollar沒有在use關(guān)鍵字中聲明,在這個(gè)匿名函數(shù)里也就不能獲取到它,所以開發(fā)中要注意這個(gè)問題。

有人可能會(huì)想到,是否可以在匿名函數(shù)中改變上下文的變量,但我發(fā)現(xiàn)是不可以的:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function getMoney() { ????$rmb = 1; ????$func = function() use ( $rmb ) { ????????echo $rmb; ????????//把$rmb的值加1 ????????$rmb++; ????}; ????$func(); ????echo $rmb; } getMoney(); //輸出: //1 //1

啊,原來use所引用的也只不過是變量的一個(gè)副本而已。但是我想要完全引用變量,而不是復(fù)制。

要達(dá)到這種效果,其實(shí)在變量前加一個(gè) & 符號(hào)就可以了:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function getMoney() { ????$rmb = 1; ????$func = function() use ( &$rmb ) { ????????echo $rmb; ????????//把$rmb的值加1 ????????$rmb++; ????}; ????$func(); ????echo $rmb; } getMoney(); //輸出: //1 //2

好,這樣匿名函數(shù)就可以引用上下文的變量了。如果將匿名函數(shù)返回給外界,匿名函數(shù)會(huì)保存use所引用的變量,而外界則不能得到這些變量,這樣形成‘閉包’這個(gè)概念可能會(huì)更清晰一些。

根據(jù)描述改變一下上面的例子:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 function getMoneyFunc() { ????$rmb = 1; ????$func = function() use ( &$rmb ) { ????????echo $rmb; ????????//把$rmb的值加1 ????????$rmb++; ????}; ????return $func; } $getMoney = getMoneyFunc(); $getMoney(); $getMoney(); $getMoney(); //輸出: //1 //2 //3


?

總結(jié)

PHP閉包的特性并沒有太大驚喜,其實(shí)用CLASS就可以實(shí)現(xiàn)類似甚至強(qiáng)大得多的功能,更不能和js的閉包相提并論,只能期待PHP以后對(duì)閉包支持的改 進(jìn)。不過匿名函數(shù)還是挺有用的,比如在使用preg_replace_callback等之類的函數(shù)可以不用在外部聲明回調(diào)函數(shù)了。

轉(zhuǎn)載于:https://www.cnblogs.com/agang-php/p/5239749.html

總結(jié)

以上是生活随笔為你收集整理的PHP闭包(Closure)初探(转载 http://my.oschina.net/melonol/blog/126694?p=2#comments)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩一区二区三区精品 | 亚洲综合精品国产一区二区三区 | 精品亚洲永久免费精品 | 国产视频首页 | 欧美少妇性生活 | 午夜精品久久久久久久蜜桃 | 黄色福利在线观看 | 99黄色| 国产乱码精品一区二区三区中文 | 打美女白嫩屁屁网站 | 狠狠一区 | 欧美亚洲韩国 | 欧美一区二区三区免费在线观看 | 桃色在线视频 | 草久在线 | 亚洲不卡视频在线观看 | 国产精品成熟老女人 | 情侣av| 国产精品日韩在线 | 亚洲图片在线观看 | 国产日韩一级 | 欧洲在线一区 | 亚洲AV综合色区无码国产播放 | 欧美色图亚洲激情 | 性高湖久久久久久久久免费 | 免费看欧美一级片 | 成人av动漫在线观看 | 综合色区| 久久精品无码一区二区三区免费 | 免费网站www在线观看 | 三级中文字幕 | 亚洲天堂激情 | 国产精品天美传媒入口 | 欧美操穴视频 | 91麻豆国产福利精品 | 亚洲av无码国产精品色午夜 | 久久精品婷婷 | 四虎三级 | 午夜精品视频在线观看 | 欧美日韩欧美日韩在线观看视频 | 农村寡妇一区二区三区 | 久久成人综合 | 亚洲天堂小视频 | 91爱看| 中文字幕日韩专区 | 久久久久99精品成人片试看 | 视频在线观看免费大片 | 美女赤身免费网站 | 911国产| 一级淫片在线观看 | 久久这里只有精品6 | 久久久久久久极品内射 | 久草视频精品在线 | 国产激情a | 高潮一区二区 | 免费观看av网址 | 日日噜噜夜夜爽爽 | 久久美女免费视频 | 手机在线看a | 中文字幕一级片 | www.天天综合 | 午夜在线视频免费观看 | 爱情岛论坛永久入口 | 日韩视频一二三区 | 日本丰满熟妇videossex一 | 中文字幕精品一区 | 在线免费观看国产精品 | 国产精品高潮呻吟视频 | 国产原创在线观看 | 婷婷狠狠操 | 人日人视频 | 国产6区 | 欧美一区2区三区4区公司 | 国产曰肥老太婆无遮挡 | 亚洲中文字幕无码av | 欧美日韩aaa | 欧美日韩在线视频播放 | 成人免费网视频 | 视频在线观看免费大片 | 久久久久99精品国产片 | 黄色污小说| 在线视频一区二区三区四区 | 福利电影在线播放 | 韩国成人理伦片免费播放 | 精品国产鲁一鲁一区二区张丽 | 亚洲婷婷在线观看 | 骚av在线| 欧美色综合 | 精品一区二区三区四 | www.成人在线视频 | 日本高清免费不卡视频 | 91亚洲国产精品 | 国产欧美日本 | 国产黄页| 成人福利在线 | 亚洲欧美日韩在线播放 | 国产视频在线免费观看 | 韩日欧美 | 中国美女一级黄色片 |