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

首頁 > 開發 > PHP > 正文

php的閉包(Closure)匿名函數初探

2024-05-04 23:42:58
字體:
來源:轉載
供稿:網友
本文主要給大家介紹的是php5.3引入的PHP匿名函數,也就是閉包(Closure),以及閉包的作用,非常詳細,這里推薦給有需要的小伙伴們。
 

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

$func = function() {   }; //帶結束符可以看到,匿名函數因為沒有名字,如果要使用它,需要將其返回給一個變量。匿名函數也像普通函數一樣可以聲明參數,調用方法也相同:$func = function( $param ) {  echo $param;}; $func( 'some string' ); //輸出://some string

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

 1、實現閉包
將匿名函數在普通函數中當做參數傳入,也可以被返回。這就實現了一個簡單的閉包。

下邊有三個例子

//例一//在函數里定義一個匿名函數,并且調用它function printStr() {  $func = function( $str ) {    echo $str;  };  $func( 'some string' );} printStr();   //例二//在函數中把匿名函數返回,并且調用它function getPrintStrFunc() {  $func = function( $str ) {    echo $str;  };  return $func;} $printStrFunc = getPrintStrFunc();$printStrFunc( 'some string' );    //例三//把匿名函數當做參數傳遞,并且調用它function callFunc( $func ) {  $func( 'some string' );} $printStrFunc = function( $str ) {  echo $str;};callFunc( $printStrFunc ); //也可以直接將匿名函數進行傳遞。如果你了解js,這種寫法可能會很熟悉callFunc( function( $str ) {  echo $str;} );

2、連接閉包和外界變量的關鍵字:USE
閉包可以保存所在代碼塊上下文的一些變量和值。PHP在默認情況下,匿名函數不能調用所在代碼塊的上下文變量,而需要通過使用use關鍵字。

換一個例子看看:

function getMoney() {  $rmb = 1;  $dollar = 6;  $func = function() use ( $rmb ) {    echo $rmb;    echo $dollar;  };  $func();} getMoney(); //輸出://1//報錯,找不到dorllar變量

可以看到,dollar沒有在use關鍵字中聲明,在這個匿名函數里也就不能獲取到它,所以開發中要注意這個問題。

有人可能會想到,是否可以在匿名函數中改變上下文的變量,但我發現是不可以的:

function getMoney() {  $rmb = 1;  $func = function() use ( $rmb ) {    echo $rmb;    //把$rmb的值加1    $rmb++;  };  $func();  echo $rmb;} getMoney(); //輸出://1//1

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

要達到這種效果,其實在變量前加一個 & 符號就可以了:

function getMoney() {  $rmb = 1;  $func = function() use ( &$rmb ) {    echo $rmb;    //把$rmb的值加1    $rmb++;  };  $func();  echo $rmb;} getMoney(); //輸出://1//2

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

根據描述改變一下上面的例子:

function getMoneyFunc() {  $rmb = 1;  $func = function() use ( &$rmb ) {    echo $rmb;    //把$rmb的值加1    $rmb++;  };  return $func;} $getMoney = getMoneyFunc();$getMoney();$getMoney();$getMoney(); //輸出://1//2//3

 總結
PHP閉包的特性并沒有太大驚喜,其實用CLASS就可以實現類似甚至強大得多的功能,更不能和js的閉包相提并論,只能期待PHP以后對閉包支持的改進。不過匿名函數還是挺有用的,比如在使用preg_replace_callback等之類的函數可以不用在外部聲明回調函數了。

小伙伴們是否對PHP的匿名函數也就是閉包函數有了新的認識了呢,希望本文能給大家一些提示,希望大家能夠喜歡。



注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品mp4| 最近2019中文字幕大全第二页| 久久久久久午夜| 久久香蕉国产线看观看av| 在线不卡国产精品| 亚洲free性xxxx护士hd| 欧美大片在线看免费观看| 亚洲第一区中文99精品| 中文字幕亚洲精品| 亚洲午夜国产成人av电影男同| 日本精品久久中文字幕佐佐木| 亚洲欧美另类国产| 久久久久久久国产精品| 亚洲综合小说区| 欧美激情一级精品国产| 亚洲第一区在线观看| 少妇久久久久久| 久久精品91久久香蕉加勒比| 91wwwcom在线观看| 亚洲性生活视频在线观看| 国产成人av网址| 久久99视频免费| 亚洲美女免费精品视频在线观看| 91精品久久久久久久久久久久久久| 国产精品久久久久久久av大片| 亚洲精品国产福利| 国产综合久久久久久| 正在播放亚洲1区| 亚洲人成网站999久久久综合| 中文字幕亚洲色图| 国模叶桐国产精品一区| 欧美性20hd另类| 日韩精品免费一线在线观看| 欧美成人精品h版在线观看| 日本亚洲欧洲色α| 亚洲成人网在线| 国产区精品在线观看| 欧美人交a欧美精品| 亚洲亚裔videos黑人hd| 91久久在线播放| 亚洲аv电影天堂网| 中文字幕日韩欧美精品在线观看| 久久免费视频这里只有精品| 国产精品91免费在线| 2019中文字幕免费视频| 欧美成人午夜激情视频| 国产亚洲精品日韩| 国产69精品久久久久久| 久久69精品久久久久久久电影好| 欧美色xxxx| 欧美国产日产韩国视频| 欧美性猛交xxxx黑人| 久久人人爽人人爽人人片av高清| 国产小视频国产精品| 久久久女女女女999久久| 久久琪琪电影院| 国产精品久久久久久久久粉嫩av| 成人黄色大片在线免费观看| 欧美一区二区.| 欧美一级大片在线观看| 亚洲激情视频在线观看| 91亚洲国产成人久久精品网站| 亚洲午夜未满十八勿入免费观看全集| 国模精品系列视频| 欧日韩不卡在线视频| 三级精品视频久久久久| 国产精品电影网站| 欧美性生交xxxxx久久久| 欧美在线视频播放| 精品二区三区线观看| 久久中文字幕视频| 日本一区二区三区四区视频| 国产欧美一区二区三区在线| 亚洲欧美成人一区二区在线电影| 日韩午夜在线视频| 国产精品免费福利| 91精品中文在线| 欧美精品久久久久久久免费观看| 国产欧美中文字幕| 欧美激情精品久久久久久变态| 92裸体在线视频网站| 日本高清+成人网在线观看| 日韩精品在线看| 亚洲精品一区av在线播放| 欧美成人在线免费视频| 欧美视频免费在线观看| 狠狠躁夜夜躁人人爽天天天天97| 欧美激情欧美激情在线五月| 亚洲第一中文字幕在线观看| 欧美日韩在线看| 亚洲美女性生活视频| 国产精品无码专区在线观看| 欧美视频精品一区| 国产脚交av在线一区二区| 久久精品中文字幕一区| 成人亚洲欧美一区二区三区| 亚洲曰本av电影| 亚洲欧美精品一区二区| 日韩在线观看电影| 国产999在线| 欧美精品在线视频观看| 国产精品久久99久久| 亚洲天堂第二页| 最近中文字幕日韩精品| 亚洲欧美成人网| 欧美最猛性xxxxx亚洲精品| 日韩女优人人人人射在线视频| 亚洲美女av电影| 久久99精品国产99久久6尤物| 久久视频免费观看| 国产精品久久久久久久久借妻| 国产成人在线一区二区| 日本国产精品视频| 国产一区二区香蕉| 欧美成人三级视频网站| 国产日产欧美a一级在线| 国产成人精品av在线| 国产免费一区二区三区香蕉精| 亚洲2020天天堂在线观看| 亚洲日韩中文字幕在线播放| 668精品在线视频| 欧美电影免费在线观看| 成人国内精品久久久久一区| 亚洲成成品网站| 亚洲国产精品久久精品怡红院| 国产精品一区二区三区久久| 国产日韩欧美中文在线播放| 欧美激情视频给我| 一区二区三区精品99久久| 日韩在线视频网| 久久精品免费播放| 日韩网站免费观看| 欧美在线性视频| 欧美电影在线观看| 欧美性猛交xxxxx水多| 欧美情侣性视频| 97成人精品区在线播放| 久久综合88中文色鬼| 狠狠色狠色综合曰曰| 欧美成人精品xxx| 91福利视频在线观看| 国产91露脸中文字幕在线| 亚洲淫片在线视频| 欧美日韩在线免费观看| 日韩高清不卡av| 欧美日韩激情视频| 国产亚洲欧洲黄色| 日韩成人激情视频| 亚洲三级 欧美三级| 国产精品黄色av| 日韩在线观看免费全| 精品二区三区线观看| 一级做a爰片久久毛片美女图片| 久久综合88中文色鬼| 国产成人av网址| 日韩欧美成人免费视频| 国产精品美腿一区在线看| 国产精品一区二区久久精品| 日韩在线观看免费av| 亚洲一品av免费观看| 欧美日韩一区二区精品| 亚洲欧美一区二区精品久久久| 国产精品大片wwwwww| 日韩在线一区二区三区免费视频|