目錄
#一、透過監聽
二、透過訂閱
1、建立訂閱類別
2、設定監聽
# 3.觸發監聽
4、處理監聽邏輯
4.1 自動綁定
4.2 手動綁定
首頁 php框架 ThinkPHP Thinkphp事件機制如何實現

Thinkphp事件機制如何實現

Jun 02, 2023 pm 05:37 PM
thinkphp

    事件機制的實作有兩種途徑:透過監聽、透過訂閱

    #一、透過監聽

    1、建立監聽類:在命令列模式下進入框架根目錄執行

    php think make:listener <自訂的類別名稱>

    例如:

    php think make:listener UserListener

    執行之後將在<框架根目錄>\app\listener\下產生UserListener這個類。

    2、設定監聽:在<框架根目錄>\app\event.php這個檔案的listen陣列中設定UserListener這個類,如下:

    'listen' => [
        'testEvent' => ['app\listener\UserListener']
    ],

    3、觸發監聽:在你需要觸發監聽的地方加入如下程式碼

    event(&#39;testEvent&#39;);
    登入後複製

    注意:這裡的參數testEvent即為事件名稱,可隨便定義,但必須與在event.php檔案裡配置的鍵名一致。

    觸發監聽時你可以帶第二個參數。透過第二個參數你可以把任何資料傳遞到UserListener這個類別中,也就是handle方法的參數(不明白啥意思的結合下面的完整程式碼理解)。

    4、處理監聽邏輯:在UserListener類別的handle方法中完成業務邏輯

    #完整程式碼如下

    Other:一個用來測試的類別

    <?php
    namespace app\controller;
    class Other
    {
        public function hello()
        {
            echo &#39;hello function&#39;;
        }
    }
    登入後複製

    Index:觸發監聽的類別

    登入後複製

    UserListener:事件監聽類別

    <?php
    namespace app\listener;
    class UserListener
    {
        /**
         * 事件监听处理
         *
         * @return mixed
         */
        public function handle($event)
        {
            //当调用Index类的test1方法时该代码有效,$event为null
            var_dump($event);
            //当调用Index类的test2方法时该代码有效,$event为字符串hello
            var_dump($event);
            //当调用Index类的test3方法时该代码有效,$event为Index类的实例
            //可以访问Index类的name变量
            echo $event->name;
            //当调用Index类的test4方法时该代码有效,$event为Other类的实例
            //可以调用Other类的hello方法
            echo $event->hello();
        }
    }
    登入後複製

    二、透過訂閱

    1、建立訂閱類別

    #在命令行模式下進入框架根目錄執行

    php think make:subscribe <自訂的類別名稱>

    例如:

    #php think make:subscribe UserSubscribe

    執行之後將在<框架根目錄>\app\subscribe\下產生UserSubscribe這個類別。

    2、設定監聽

    在<框架根目錄>\app\event.php這個檔案的subscribe陣列中配置UserSubscribe這個類,如下:

    'subscribe' => ['app\subscribe\UserSubscribe'],

    注意:為了測試效果,要把上面設定的UserListener從listen陣列刪除掉

    # 3.觸發監聽

    跟第一種途徑一樣

    4、處理監聽邏輯

    處理監聽的邏輯又有兩種方法,我稱之為自動綁定和手動綁定。手動綁定和自動綁定是互斥的,只能二選一。

    4.1 自動綁定

    完成業務邏輯的ontestEvent方法應該要加入到UserSubscribe類別中。新增的方法名稱不能隨意定義,規則是事件名稱前面加上on。因為我們在event.php裡定義的事件名稱是testEvent,所以方法名稱就是ontestEvent(注意大小寫)。監聽方法定義之後就會自動與事件綁定,所以我稱之為自動綁定。

    完整程式碼如下

    Other和Index類別的程式碼跟第一種途徑一樣

    UserSubscribe:事件訂閱類別

    <?php
    namespace app\subscribe;
    class UserSubscribe
    {
        public function ontestEvent($user)
        {
            //当调用Index类的test1方法时该代码有效,$event为null
            var_dump($user);
            //当调用Index类的test2方法时该代码有效,$event为字符串hello
            var_dump($user);
            //当调用Index类的test3方法时该代码有效,$event为Index类的实例
            //可以访问Index类的name变量
            echo $user->name;
            //当调用Index类的test4方法时该代码有效,$event为Other类的实例
            //可以调用Other类的hello方法
            echo $user->hello();
        }
    }
    登入後複製
    4.2 手動綁定

    首先,建立事件類,負責處理特定的業務邏輯。在命令列模式下進入框架根目錄執行:

    php think make:event <自訂的類別名稱>

    例如:

    php think make:event UserEvent

    執行之後將在<框架根目錄>\app\event\下產生UserEvent這個類別。

    再在該類別中定義一個handle方法,該方法有一個傳入參數。方法名和傳入的參數名可以任意定義。具體的業務邏輯就可以放在handle方法裡面處理。

    接下來,在UserSubscribe類別裡面新增subscribe方法,方法需要接收一個Event物件作為參數。接著,在該函數裡將事件監聽綁定到UserEvent類別的handle方法上。如下:

    $event->listen(&#39;testEvent&#39;, [app(&#39;app\event\UserEvent&#39;), &#39;handle&#39;]);
    登入後複製

    完整程式碼如下

    Other和Index類別的程式碼跟第一種途徑一樣

    UserSubscribe:事件訂閱類別

    登入後複製

    UserEvent:事件處理類別

    <?php
    declare (strict_types = 1);
    namespace app\event;
    class UserEvent
    {
        public function handle($user)
        {
            //当调用Index类的test1方法时该代码有效,$user为null
            var_dump($user);
            //当调用Index类的test2方法时该代码有效,$user为字符串hello
            var_dump($user);
            //当调用Index类的test3方法时该代码有效,$user为Index类的实例
            //可以访问Index类的name变量
            echo $user->name;
            //当调用Index类的test4方法时该代码有效,$user为Other类的实例
            //可以调用Other类的hello方法
            echo $user->hello();
        }
    }
    登入後複製

    以上是Thinkphp事件機制如何實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    thinkphp專案怎麼運行 thinkphp專案怎麼運行 Apr 09, 2024 pm 05:33 PM

    執行 ThinkPHP 專案需要:安裝 Composer;使用 Composer 建立專案;進入專案目錄,執行 php bin/console serve;造訪 http://localhost:8000 查看歡迎頁面。

    thinkphp有幾個版本 thinkphp有幾個版本 Apr 09, 2024 pm 06:09 PM

    ThinkPHP 擁有多個版本,針對不同 PHP 版本而設計。主要版本包括 3.2、5.0、5.1 和 6.0,而次要版本用於修復 bug 和提供新功能。目前最新穩定版本為 ThinkPHP 6.0.16。在選擇版本時,需考慮 PHP 版本、功能需求和社群支援。建議使用最新穩定版本以獲得最佳性能和支援。

    thinkphp怎麼運行 thinkphp怎麼運行 Apr 09, 2024 pm 05:39 PM

    ThinkPHP Framework 的本機運作步驟:下載並解壓縮 ThinkPHP Framework 到本機目錄。建立虛擬主機(可選),指向 ThinkPHP 根目錄。配置資料庫連線參數。啟動 Web 伺服器。初始化 ThinkPHP 應用程式。存取 ThinkPHP 應用程式 URL 運行。

    laravel和thinkphp哪個好 laravel和thinkphp哪個好 Apr 09, 2024 pm 03:18 PM

    Laravel 和 ThinkPHP 框架的效能比較:ThinkPHP 效能通常優於 Laravel,專注於最佳化和快取。 Laravel 性能良好,但對於複雜應用程序,ThinkPHP 可能更適合。

    開發建議:如何利用ThinkPHP框架實現非同步任務 開發建議:如何利用ThinkPHP框架實現非同步任務 Nov 22, 2023 pm 12:01 PM

    《開發建議:如何利用ThinkPHP框架實現非同步任務》隨著網路技術的快速發展,Web應用程式對於處理大量並發請求和複雜業務邏輯的需求也越來越高。為了提高系統的效能和使用者體驗,開發人員常常會考慮利用非同步任務來執行一些耗時操作,例如發送郵件、處理文件上傳、產生報表等。在PHP領域,ThinkPHP框架作為一個流行的開發框架,提供了一些便捷的方式來實現非同步任務。

    thinkphp怎麼安裝 thinkphp怎麼安裝 Apr 09, 2024 pm 05:42 PM

    ThinkPHP 安裝步驟:準備 PHP、Composer、MySQL 環境。使用 Composer 建立專案。安裝 ThinkPHP 框架及相依性。配置資料庫連線。產生應用程式碼。啟動應用程式並造訪 http://localhost:8000。

    thinkphp效能怎麼樣 thinkphp效能怎麼樣 Apr 09, 2024 pm 05:24 PM

    ThinkPHP 是一款高效能的 PHP 框架,具備快取機制、程式碼最佳化、平行處理和資料庫最佳化等優勢。官方性能測試顯示,它每秒可處理超過 10,000 個請求,實際應用中被廣泛用於京東商城、攜程網等大型網站和企業系統。

    開發建議:如何利用ThinkPHP框架進行API開發 開發建議:如何利用ThinkPHP框架進行API開發 Nov 22, 2023 pm 05:18 PM

    開發建議:如何利用ThinkPHP框架進行API開發隨著網際網路的不斷發展,API(ApplicationProgrammingInterface)的重要性也日益凸顯。 API是不同應用程式之間進行通訊的橋樑,它可以實現資料共享、功能呼叫等操作,為開發者提供了相對簡單且快速的開發方式。而ThinkPHP框架作為一款優秀的PHP開發框架,具有高效能、可擴展且易用

    See all articles