<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
        主站蜘蛛池模板: 精品韩国亚洲av无码不卡区| 亚洲黄色在线播放| 在线人成免费视频69国产| 好爽又高潮了毛片免费下载| 亚洲福利视频网址| 免费国产黄网站在线观看| 亚洲成AV人片在线播放无码| 国产裸体美女永久免费无遮挡| 免费看国产一级片| 国产精品亚洲综合天堂夜夜| 四虎影视大全免费入口| 亚洲人成网站999久久久综合| 一个人看www在线高清免费看 | 亚洲av日韩片在线观看| 亚洲中文字幕丝袜制服一区| 亚洲av日韩av永久在线观看| 岛国av无码免费无禁网站| 中文字幕亚洲一区| 国产精品内射视频免费| 亚洲精品国产V片在线观看| 午夜成人无码福利免费视频| 亚洲精品456播放| 丝袜足液精子免费视频| 亚洲香蕉成人AV网站在线观看| 叮咚影视在线观看免费完整版| 久久久久亚洲AV无码永不| 67194国产精品免费观看| 亚洲久悠悠色悠在线播放| 永久免费bbbbbb视频| 美女视频黄视大全视频免费的| 免费人成视频x8x8入口| 久久九九免费高清视频| 亚洲av日韩av高潮潮喷无码 | 亚洲AV无码乱码在线观看富二代 | 亚洲日韩精品国产3区 | 亚洲国产成人久久综合野外| 五月婷婷免费视频| 亚洲av无码片在线播放| 在线观看AV片永久免费| 日韩亚洲人成在线综合| 久久精品国产亚洲一区二区|