国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - PHP教程 - PHP閉包(Closure)使用詳解

PHP閉包(Closure)使用詳解

2020-03-22 13:35PHP教程網(wǎng) PHP教程

本篇文章介紹了,PHP閉包(Closure)的使用介紹,需要的朋友參考下

不知不覺發(fā)現(xiàn)PHP已經(jīng)出到了5.5版本,而自己一直在用PHP5.2,讓我看起來像深山出來的小伙子一樣,又土又落后。在我習(xí)慣在javascript中使用閉包之后,忽然間對PHP的閉包打起了興趣。

于是乎在網(wǎng)上下了個(gè)WAMP集成開發(fā)環(huán)境,是PHP5.3版本的(PHP5.3開始引入了閉包的特性),不得不說WAMP安裝使用真的很方便。簡單配置了一下,開始動手。
 

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

復(fù)制代碼 代碼如下:

$func = function() {

}; //帶結(jié)束符


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

復(fù)制代碼 代碼如下:


$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è)例子

復(fù)制代碼 代碼如下:


//例一
//在函數(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,這種寫法可能會很熟悉
callFunc( function( $str ) {
    echo $str;
} );


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

 

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

復(fù)制代碼 代碼如下:


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è)問題。
 

 

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

復(fù)制代碼 代碼如下:


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è) & 符號就可以了:

復(fù)制代碼 代碼如下:


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

 

getMoney();

//輸出:
//1
//2


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

 

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

復(fù)制代碼 代碼如下:


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以后對閉包支持的改進(jìn)。不過匿名函數(shù)還是挺有用的,比如在使用preg_replace_callback等之類的函數(shù)可以不用在外部聲明回調(diào)函數(shù)了。

 

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日韩精品一区二区在线视频 | 久久精品国产视频 | 国产精品永久免费视频 | 国产精品一区欧美 | av电影免费在线看 | 日韩av在线中文字幕 | 黄色一级片免费观看 | 九热在线视频 | 91大片在线观看 | 国产欧美一区二区精品性色 | 国产精品一区二区免费 | 欧美激情精品久久久久久 | 亚洲第一成av人网站懂色 | 精品欧美一区二区久久久伦 | 四季久久免费一区二区三区四区 | 精品午夜久久 | 国产99久久精品一区二区永久免费 | 欧洲精品视频在线观看 | 中文视频在线 | 日韩精品影院 | 国产成人精品一区二区三区四区 | 亚洲欧美国产精品专区久久 | 亚洲黄色特级片 | 欧美日一本 | 黄色片地址 | 午夜免费电影 | 一区二区三区自拍 | 午夜色福利 | 黄色在线免费观看视频网站 | 免费的黄视频 | 成人看片免费 | 国产资源在线观看视频 | 日本久久精品视频 | 亚洲精品在线免费 | 超碰91在线 | 欧美日韩一区二区三区不卡视频 | 精品久久国产老人久久综合 | 国产一区二区在线免费观看 | 夜夜爽99久久国产综合精品女不卡 | 欧美激情一区二区三区 | 日韩精品一区二区三区在线播放 |