<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        PHP+Swoole的閉包寫法

        來源:懂視網 責編:小采 時間:2020-11-27 14:20:05
        文檔

        PHP+Swoole的閉包寫法

        PHP+Swoole的閉包寫法:JS程序員總是嘲笑PHP沒有閉包,今天抽空寫一篇文章來專門介紹一下PHP的閉包。從5.3版本開始PHP就增加了匿名函數支持,經過數個版本迭代到現在的PHP5.6、PHP7,PHP語言的閉包已經非常完善了。再結合Swoole提供的事件驅動支持,PHP的閉包功能非常強大而且很
        推薦度:
        導讀PHP+Swoole的閉包寫法:JS程序員總是嘲笑PHP沒有閉包,今天抽空寫一篇文章來專門介紹一下PHP的閉包。從5.3版本開始PHP就增加了匿名函數支持,經過數個版本迭代到現在的PHP5.6、PHP7,PHP語言的閉包已經非常完善了。再結合Swoole提供的事件驅動支持,PHP的閉包功能非常強大而且很

        JS程序員總是嘲笑PHP沒有閉包,今天抽空寫一篇文章來專門介紹一下PHP的閉包。從5.3版本開始PHP就增加了匿名函數支持,經過數個版本迭代到現在的PHP5.6、PHP7,PHP語言的閉包已經非常完善了。再結合Swoole提供的事件驅動支持,PHP的閉包功能非常強大而且很優雅。

        匿名函數


        匿名函數是閉包的核心,匿名函數在PHP里實際上是一個Closure類的對象(請注意是對象)。與普通的面向對象編程方式不同,匿名函數的代碼是直接寫在調用處的,不需要額外寫一個類,編寫方法的代碼。這樣的好處就是更直接。下面的示例是設置一個定時器,每2秒輸出hello world。

        傳統寫法

        function timer () {
         echo "hello world";
        }
        SwooleTimer::tick(2000, 'timer');

        閉包寫法

        SwooleTimer::tick(2000, function () {
         echo "hello world";
        });

        非閉包的傳統寫法,先要聲明一個函數,再轉入函數名稱字符串。兩段代碼是分離的,不夠直觀。而閉包的寫法把定時器的聲明和定時器要執行的代碼寫在了一起,邏輯非常清晰直觀。使用閉包語法可以很方便編寫回調函數。在事件驅動編程、排序、array_walk等需要用戶傳入一段執行代碼的場景中,閉包的寫法非常優雅。

        閉包更強大的地方在于它可以直接在調用處引入外部變量。PHP中實現的方法就是use關鍵詞。

        Use語法


        如果剛才的定時器需要傳入一個變量,傳統的寫法只能通過全局變量來實現。與JS不同,PHP的變量引入是顯式的,如果要引用外部變量必須使用use來聲明。而JS是隱式的,匿名函數內部可以隨意操作外部變量,無需聲明。這樣好處是少寫了一點代碼,缺點是存在風險和混亂。

        傳統寫法

        $str = "hello world";
        function timer () {
         global $str;
         echo $str;
        }
        SwooleTimer::tick(2000, 'timer');

        閉包寫法

        $str = "hello world";
        SwooleTimer::tick(2000, function () use ($str) {
         echo $str;
        });

        閉包寫法使用use直接引入了當前的$str變量,而不需要使用global全局變量。另外如果是在swoole的事件驅動編程模式,使用global就無法實現異步并發了,因為global全局變量只有1個,如果同時有多個客戶端請求,每個請求要查詢數據庫,輸出不同的內容,傳統的編程方法就不太容易實現,需要使用全局變量數組,以客戶端的ID為KEY保存各自的數據。

        傳統寫法

        $requestArray = array();
        $dbResultArray = array();
        function my_request($request, $response) {
         global $dbResultArray, $requestArray;
         $queryId = $db->query($sql, 'get_result');
         $requestArray[$request->fd] = array($request, $response);
         $dbResultArray[$queryId] = $request->fd;
        }
        function get_result($queryId, $queryResult) {
         global $dbResultArray, $requestArray;
         list($request, $response) = $requestArray[$dbResultArray[$queryId]];
         $response->end($queryResult);
        }
        $server->on('request', 'my_request');

        閉包寫法

        $server->on('request', function ($request, $response) {
         $queryId = $db->query($sql, function ($queryId, $queryResult) use ($request, $response) {
         $response->end($queryResult);
         });
        });

        傳統的寫法非常復雜,需要反復多次從全局數組保存/提取數據。而閉包的寫法非常簡潔優雅,只用了幾行代碼就實現了同樣的功能。閉包寫法非常適合用來編寫異步非阻塞回調模式的服務器程序。目前熱門的編程語言中只有PHP和JS具備這種能力。

        閉包更多特性


        在類的方法中使用匿名函數,5.4以上的版本無需使用use引入$this,直接可以在匿名函數中使用$this來調用當前對象的方法。在swoole編程中,可以利用此特性減少$serv對象的use引入傳遞。

        class Server extends SwooleServer {
         function onReceive($serv, $fd, $reactorId, $data) {
         $db->query($sql, function ($queryId, $queryResult) use ($fd) {
         $this->send($fd, $queryResult);
         }
         }
        }

        另外如果希望在閉包函數中修改外部變量,可以在use時為變量增加&引用符號即可。注意對象類型不需要加&,因為在PHP中對象默認就是傳引用而非傳值。

        更多PHP相關知識,請訪問PHP中文網!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        PHP+Swoole的閉包寫法

        PHP+Swoole的閉包寫法:JS程序員總是嘲笑PHP沒有閉包,今天抽空寫一篇文章來專門介紹一下PHP的閉包。從5.3版本開始PHP就增加了匿名函數支持,經過數個版本迭代到現在的PHP5.6、PHP7,PHP語言的閉包已經非常完善了。再結合Swoole提供的事件驅動支持,PHP的閉包功能非常強大而且很
        推薦度:
        標簽: php 寫法 swoole
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲成人免费在线| 国产免费无遮挡精品视频 | 亚洲色图黄色小说| 国产精品亚洲综合| 蜜桃视频在线观看免费视频网站WWW| 成人免费视频88| 亚洲av无码成人黄网站在线观看| 亚洲AV性色在线观看| 最近2019年免费中文字幕高清| 亚洲国产精品一区二区第一页免 | 亚洲视频在线观看2018| 亚洲午夜成人精品无码色欲| 免费视频精品一区二区三区| 亚洲А∨精品天堂在线| 久久久久久毛片免费看| yy6080久久亚洲精品| 中日韩亚洲人成无码网站| 日韩免费观看的一级毛片| 亚洲人成电影院在线观看| 国产成人免费ā片在线观看老同学 | 亚洲国产综合专区在线电影| 牛牛在线精品免费视频观看| 99精品全国免费观看视频| 久久综合亚洲鲁鲁五月天| 国产免费不卡视频| 亚洲视频免费在线播放| 在线观看人成视频免费| 亚洲无吗在线视频| 全亚洲最新黄色特级网站 | 亚洲国产成人久久笫一页| 国产精品视频全国免费观看| 卡一卡二卡三在线入口免费| 立即播放免费毛片一级| 亚洲AV无码久久| 女人被男人躁的女爽免费视频| 一个人看的在线免费视频| 亚洲午夜精品一级在线播放放 | 亚洲AV网站在线观看| 色欲国产麻豆一精品一AV一免费| ass亚洲**毛茸茸pics| 青春禁区视频在线观看直播免费|