標籤:
事件定義
當我們使用委託情境時,我們很希望有這樣兩個角色出現:廣播者和訂閱者。我們需要這兩個角色來實現訂閱和廣播這種很常見的情境。
廣播者這個角色應該有這樣的功能:包括一個委託欄位,通過調用委託來發出廣播。而訂閱者應該有這樣的功能:可以通過調用 += 和 -= 來決定何時開始或停止訂閱。
事件就是描述這種情境模式的一個詞。事件是委託的一個子集,為了滿足“廣播/訂閱”模式的需求而生。
C#中事件簡單實現
using System;namespace ConsoleApplication2{ class Program { static void Main(string[] args) { ObServer ob = new ObServer(); ob.Changed += Change; ob.Trigger("hello kitty"); Console.ReadLine(); } static void Change(string output) { Console.WriteLine(output); } } class ObServer { /// <summary> /// 事件 /// </summary> public event Action<string> Changed; /// <summary> /// 觸發事件 /// </summary> /// <param name="init"></param> public void Trigger(string init) { Changed(init); } }}
實際上, 這裡 執行A函數的時候自動執行B 函數過程,上面列子對照就只執行 init 的時候自動觸發委託的 changing 從而綁定執行print,重點是在
Observer 本身自己不實現changed ,把業務交由外面來處理這樣在處理複雜系統的耦合提供便利。
結合這個思路那麼php 實作類別似的事件
<?phpclass ObService{ public $even = null; public function trigger($init){ call_user_func($this->even, $init); }}$ob = new ObService();$ob->even = "Chanage";$ob->trigger("hello kitty!");function Chanage($str){ echo($str);}?>
總結:查了網上有些php實現事件看起來挺複雜的,這裡只是根據個人理解實現簡單的php事件思路,不一定是標準的php事件。
根據C# 事件思想來實現 php 事件