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

首頁 > 編程 > PHP > 正文

PHP閉包(Closure)初探

2020-03-22 20:11:18
字體:
來源:轉載
供稿:網友
  • 不知不覺發現PHP已經出到了5.5版本,而自己一直在用PHP5.2,讓我看起來像深山出來的小伙子一樣,又土又落后。在我習慣在javascript中使用閉包之后,忽然間對PHP的閉包打起了興趣。

    于是乎在網上下了個WAMP集成開發環境,是PHP5.3版本的(PHP5.3開始引入了閉包的特性),不得不說WAMP安裝使用真的很方便。簡單配置了一下,開始動手。www.it165.net

    匿名函數

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


    $func = function() {}; //帶結束符

    可以看到,匿名函數因為沒有名字,如果要使用它,需要將其返回給一個變量。匿名函數也像普通函數一樣可以聲明參數,調用方法也相同:


    $func = function( $param ) {    echo $param;};$func( 'some string' );//輸出://some string

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

    實現閉包

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

    下邊有三個例子


    //例一//在函數里定義一個匿名函數,并且調用它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;} );
    連接閉包和外界變量的關鍵字: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編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
    欧美专区在线视频| 在线精品高清中文字幕| 欧美激情啊啊啊| 国产精品www色诱视频| 欧美国产极速在线| 亚洲成人av片| 欧美精品在线极品| 国产成人精品久久久| 日韩av中文字幕在线免费观看| 亚洲电影成人av99爱色| 欧美日韩中文字幕日韩欧美| 亚洲第一区中文字幕| 欧美精品激情视频| 亚洲精品99久久久久中文字幕| 久久成年人免费电影| 91精品视频观看| 久久久久久久久久久亚洲| 日韩三级成人av网| 国产精品久久久久aaaa九色| www国产精品com| 一区二区三区 在线观看视| 搡老女人一区二区三区视频tv| 欧洲亚洲女同hd| 欧美亚洲另类视频| 日日噜噜噜夜夜爽亚洲精品| 国产精品观看在线亚洲人成网| 91久久精品国产91久久| 亚洲综合大片69999| 中日韩午夜理伦电影免费| 欧美午夜www高清视频| 欧美激情精品久久久久久蜜臀| 欧美一级片在线播放| 91精品国产色综合久久不卡98| 久久影视电视剧免费网站| 欧美精品videossex性护士| 欧美剧在线观看| 91精品啪aⅴ在线观看国产| 91国内免费在线视频| 91av在线影院| 欧美亚洲在线播放| 在线观看国产精品淫| 亚洲日本aⅴ片在线观看香蕉| 欧美在线视频观看免费网站| 亚洲激情自拍图| 国产69精品久久久久99| 欧美日韩国产精品一区二区三区四区| 久久久999精品视频| 国产亚洲欧美另类中文| 国产精品白嫩初高中害羞小美女| 97在线观看免费高清| 中文字幕亚洲综合久久筱田步美| 亚洲精品美女久久久久| 久久亚洲精品毛片| 亚洲欧美一区二区激情| 国产精品久久久久久久久免费看| 亚洲黄在线观看| 成人精品久久av网站| 亚洲va欧美va在线观看| 国产极品精品在线观看| 国产精品一区二区三区毛片淫片| 久久影院资源网| 操日韩av在线电影| 亚洲最大福利视频网站| 亚洲xxx大片| 日本精品久久久久影院| 91超碰caoporn97人人| 亚洲欧美日韩一区二区三区在线| 国产美女精彩久久| 国产精品欧美激情| 精品久久久久久电影| 91精品久久久久久久久青青| 91手机视频在线观看| 欧美精品久久久久久久免费观看| 亚洲精品久久久久久久久久久| 亚洲人成电影在线播放| 国产日韩欧美成人| 欧美成人激情图片网| 美女视频久久黄| 日韩精品极品毛片系列视频| 亚洲一区二区久久久| 久久久久久久国产精品| 欧美激情在线观看视频| 日韩欧美亚洲一二三区| 国产精品自产拍在线观看| 久久网福利资源网站| 亚洲系列中文字幕| 国产精品27p| 97视频在线观看亚洲| 欧美一区亚洲一区| 亚洲精品在线观看www| 中文字幕日本欧美| 国产免费一区视频观看免费| 欧美影院在线播放| 亚洲自拍小视频| 久久精品青青大伊人av| 欧美大片va欧美在线播放| 亚洲天堂男人天堂女人天堂| 中文字幕亚洲在线| 主播福利视频一区| 欧美高清理论片| 国产999精品久久久| 久久亚洲精品小早川怜子66| 国产91在线播放精品91| 日韩电影在线观看中文字幕| 色综合五月天导航| 尤物tv国产一区| 亚洲a区在线视频| 成人午夜在线观看| 夜夜嗨av色一区二区不卡| 亚洲毛茸茸少妇高潮呻吟| 精品国产一区av| 亚洲成人性视频| 欧美激情欧美激情在线五月| 懂色av影视一区二区三区| 国产精品福利在线观看| 欧美极品欧美精品欧美视频| 欧美另类xxx| 国产极品jizzhd欧美| 欧美在线视频导航| 亚洲国产一区二区三区在线观看| 欧美乱人伦中文字幕在线| 欧美国产第二页| 亚洲欧美另类中文字幕| 国模叶桐国产精品一区| 亚洲美女久久久| 国产亚洲欧美另类中文| 91性高湖久久久久久久久_久久99| 亚洲国产精品va| 日韩第一页在线| 中文字幕欧美亚洲| 成人欧美一区二区三区黑人孕妇| 日韩大胆人体377p| 久久99热精品这里久久精品| 欧美精品电影在线| 久久综合电影一区| 欧美激情亚洲国产| 精品国产美女在线| 日韩精品视频在线观看免费| 久久久精品欧美| 中日韩美女免费视频网址在线观看| 欧美夫妻性视频| 91免费看国产| 亚洲精品一区二区在线| 亚洲精品videossex少妇| 国产一区二区三区视频| 欧美怡春院一区二区三区| 国产主播欧美精品| 亚洲精品免费av| 欧美黑人极品猛少妇色xxxxx| 日韩电影免费在线观看中文字幕| 97久久精品国产| 精品久久久精品| 不卡av在线网站| 91成人国产在线观看| 亚洲精品v欧美精品v日韩精品| 欧美精品一区在线播放| 色狠狠av一区二区三区香蕉蜜桃| 亚洲天堂视频在线观看| 欧美成人午夜免费视在线看片| 国产精品99久久99久久久二8| 久久久久久久国产| 欧美日韩在线一区| 欧美日韩中文字幕在线| 欧美肥老妇视频|