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

首頁 > 編程 > PHP > 正文

詳解php中匿名函數和閉包函數

2020-03-22 18:42:47
字體:
來源:轉載
供稿:網友

本篇文章給大家分享的內容是詳解php中匿名函數和閉包函數,有著一定的參考價值,有需要的朋友可以參考一下

php的匿名函數和閉包函數


tags: 匿名函數 閉包函數 php閉包函數 php匿名函數 function use


引言:匿名函數和閉包函數都不是特別高深的知識,但是很多剛入門的朋友卻總是很困惑,因為大家習慣上寫了函數就是用來調用的,匿名函數和閉包函數做什么用的?

匿名函數

php官方解釋如下:
匿名函數(Anonymous functions),也叫閉包函數(closures),允許 臨時創建一個沒有指定名稱的函數。最經常用作回調函數(callback)參數的值。當然,也有其它應用的情況。

這里說的很簡單,可以用做回調函數,下面例子就是作為回調函數的

<?phpecho preg_replace_callback('~-([a-z])~', function ($match) {    return strtoupper($match[1]);}, 'hello-world');// 輸出 helloWorld?>

上述例子中,preg_replace_callback 函數需要三個參數,第一個參數是一個html' target='_blank'>正則表達式用來匹配數據,第二個參數是一個函數,第三個參數是需要匹配的字符串,也可以像下面這樣寫

<?php$testFunc = function ($match) {        return strtoupper($match[1]);    };  echo preg_replace_callback('~-([a-z])~', $testFunc, 'hello-world'); // 輸出 helloWorld ?>

但是我們看到這個方法顯然我們只需要用一次,所以沒有必要再給他去命名,也沒有多大的必要再去把他賦值給一個變量(賦值給變量的過程:PHP 會自動把此種表達式轉換成內置類 Closure 的對象實例賦值給變量)

閉包函數

php中匿名函數也叫閉包函數,所以沒什么區別。但是一般意義上的閉包的概念不是這樣的,我們先說一下傳統意義上的閉包,并提供一篇文章中js中的閉包用來和php中的閉包(匿名函數)進行對比。
學習Javascript閉包(Closure)—阮一峰

php中其實沒有傳統意義上的閉包函數,因為php中的函數不能調用夫作用域中的變量。如下

<?php    function a(){        $a = 11;                function b(){            $b = 22;                        echo $a;                        echo $b;        }        b();    }    a();    //報Notice:Undefined variable: a in index.php on line 6    //22    ?>

而看上面文章中得知,js中是可以的。所以php中匿名函數也叫閉包函數,也可以傳遞父作用域的變量進閉包函數(達到了類似js獲取父作用域變量的效果),php中使用的是use關鍵字,具體如下

<?php$count = 0;$a = function(){ var_dump($count); };$b = function() use ($count){ var_dump($count); };$count++;$c = function() use (&$count){ var_dump($count); };$count++;$a();    // null   Notice: Undefined variable: count in$b();    // int 0$c();    // int 2$count++;$b();    // int 0?>

上述例子的輸出和你認為的是不是不同呢。

解析:閉包函數(匿名函數)使用use獲取函數定義時的副作用域變量,不管在何時調用。如果要獲取調用時的變量值,需要用引用傳遞。具體怎么使用就要看什么使用場景了。

列舉了幾種常用的場景
  1. 作為回調函數

    //一個我們使用過的例子<?php/* * 菜譜拆分食物后的拼接 * 參數均不能為空 * */public function mergeFoodsStr($str,array $mapping){ //        $str = '白菜半棵、__2__鮑菇兩只、__0__一根,__1__兩根,三者比例為100:100:15,醬油5克,香油2克,鹽1克。';//        $mapping = array(//            0 =>array('name' => '胡蘿卜','id' =>  '81' ),//            1 =>array ( 'name' => '蘿卜', 'id' =>  '72'),//            2 =>array ( 'name' =>  '杏', 'id' => '1841')//        );    if(empty($str) || empty($mapping)){        return false;    }    $strNew = preg_replace_callback('"|__(/d)__|" ',function ($matches) use ($mapping){        return $mapping[$matches[1]]['name'];    },$str);    $this->log('拼接后的食材字符串',$strNew);    return $strNew;}?>
  2. 如果是一次性使用的函數,不能被重用,可以使用閉包函數

  3. 使用array_work()函數配合匿名函數來減少foreach層數

  4. 等等

以上就是詳解php中匿名函數和閉包函數的詳細內容,更多請關注 其它相關文章!

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品久久久一区二区三区| 国产精品免费小视频| 伊人久久久久久久久久久久久| 在线丨暗呦小u女国产精品| 欧美在线一级视频| 成人国内精品久久久久一区| 亚洲国产成人精品女人久久久| 亚洲精品国产综合区久久久久久久| 国产成人精品免高潮费视频| 亚洲精品v天堂中文字幕| 久久99精品久久久久久噜噜| 欧美性xxxx极品hd欧美风情| 欧美日韩一区二区在线| 国产欧美日韩中文字幕在线| 国产日韩中文字幕| 亚洲综合中文字幕在线| 国产有码在线一区二区视频| 久久国产精品影片| 欧美极品美女视频网站在线观看免费| 在线播放日韩精品| 亚洲欧美日韩图片| 欧美性猛交xxxx乱大交极品| 狠狠躁夜夜躁人人躁婷婷91| 91av在线免费观看视频| 狠狠干狠狠久久| 高清一区二区三区日本久| 欧美肥臀大乳一区二区免费视频| 国产一区二区三区视频在线观看| 精品视频—区二区三区免费| 在线a欧美视频| 欧美一级在线亚洲天堂| 日本久久中文字幕| 永久免费毛片在线播放不卡| 性欧美视频videos6一9| 久久久久久久久久久国产| 欧美另类高清videos| 日韩欧美中文免费| 日本中文字幕久久看| 久久天天躁夜夜躁狠狠躁2022| 午夜精品一区二区三区av| 日韩不卡中文字幕| 中文国产成人精品久久一| 亚洲一区二区久久久久久| 中日韩美女免费视频网址在线观看| 久久久久久久久网站| 国产丝袜视频一区| 国产乱人伦真实精品视频| 欧美野外wwwxxx| 精品久久久久久久久久久久久久| 国模极品一区二区三区| 精品久久久久久久久久| 日韩一区二区在线视频| 精品久久久久久久久国产字幕| 日韩精品极品在线观看播放免费视频| 久久视频在线看| 日韩激情av在线免费观看| 精品国产老师黑色丝袜高跟鞋| 成人免费淫片视频软件| 国产香蕉97碰碰久久人人| 欧美日韩精品国产| 亚洲国产精品久久久久| 久久视频免费在线播放| 麻豆国产精品va在线观看不卡| 欧美老女人性生活| 自拍亚洲一区欧美另类| 91性高湖久久久久久久久_久久99| 日韩精品视频在线观看免费| 国产日本欧美一区二区三区在线| 亚洲一区二区中文| 欧美自拍视频在线| 欧亚精品中文字幕| 中日韩美女免费视频网址在线观看| 97视频在线观看免费高清完整版在线观看| 欧美激情亚洲国产| 欧美日韩一区二区在线| 国产精品高潮粉嫩av| 亚洲电影免费观看高清完整版在线观看| 亚洲国产小视频在线观看| 国产97在线观看| 在线精品91av| 成人久久一区二区| 久久国产精品电影| 亚洲伊人久久大香线蕉av| 成人黄色免费片| 96国产粉嫩美女| 亚洲欧美日韩图片| 91精品国产91久久久久久| 亚洲午夜精品久久久久久性色| 日韩大胆人体377p| 日本韩国在线不卡| 国产色综合天天综合网| 国产精品入口尤物| 国产亚洲a∨片在线观看| 亚洲午夜久久久影院| 在线观看中文字幕亚洲| 亚洲精品美女久久| 亚洲欧美日本伦理| 在线视频欧美日韩精品| 国产精品自产拍在线观看| 欧洲美女7788成人免费视频| 日韩免费看的电影电视剧大全| 国产精品久久久久久久午夜| 久久精品国产精品亚洲| 成人久久久久久| 欧美又大又硬又粗bbbbb| 一区二区三区视频免费在线观看| 成人免费高清完整版在线观看| 97精品国产97久久久久久免费| 日本亚洲精品在线观看| 青青青国产精品一区二区| 91精品国产综合久久香蕉最新版| 欧美有码在线观看视频| 久久亚洲成人精品| 免费不卡欧美自拍视频| 92看片淫黄大片欧美看国产片| 国产激情综合五月久久| 亚洲伊人一本大道中文字幕| 精品久久中文字幕久久av| 亚洲综合日韩在线| 亚洲免费伊人电影在线观看av| 欧美在线视频a| 亚洲免费小视频| 精品国产福利视频| 日韩av综合网站| 久久精品青青大伊人av| 欧美日韩中文字幕在线视频| 日本精品视频在线播放| 久久精品国产清自在天天线| 欧美在线视频免费| 最新国产成人av网站网址麻豆| 欧美日韩精品国产| 亚洲电影在线看| 国产精品啪视频| 亚洲一区二区三区xxx视频| 精品亚洲一区二区三区四区五区| 91最新在线免费观看| 日本国产高清不卡| 久久香蕉国产线看观看网| 国产成人精品在线播放| 日韩精品www| 日韩精品中文字幕视频在线| 亚洲欧洲日本专区| 精品福利在线看| 日韩欧美国产视频| 精品久久久久久久久久久久久| 国产精品欧美激情在线播放| 久久资源免费视频| 久久色在线播放| 日韩成人在线视频观看| 国模精品视频一区二区| 深夜福利日韩在线看| 91国产精品视频在线| 91免费在线视频网站| 精品免费在线视频| 日韩极品精品视频免费观看| 懂色av中文一区二区三区天美| 国产精品6699| 亚洲片国产一区一级在线观看| 国产精品日韩欧美综合| 亚洲成人激情在线| 欧美中文字幕在线播放| 久久99视频精品| 日韩高清av在线| 精品国产成人av|