C# イベントのアイデアに基づいて php イベントを実装する
委任シナリオを使用する場合、ブロードキャスターとサブスクライバーという 2 つの役割が存在することを強く望みます。サブスクリプションとブロードキャストの非常に一般的なシナリオを実装するには、これら 2 つの役割が必要です。
ブロードキャスターの役割には、デリゲート フィールドを含め、デリゲートを呼び出してブロードキャストを発行する機能が必要です。サブスクライバーは、= と -= を呼び出して、サブスクリプションをいつ開始または停止するかを決定できる必要があります。
イベントとは、この場面パターンを表す言葉です。イベントは委任のサブセットであり、「ブロードキャスト/サブスクライブ」モデルのニーズを満たすために作成されます。
C# でのイベントの簡単な実装
<span style="color: #0000ff;">using</span><span style="color: #000000;"> System;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> ConsoleApplication2{ </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Program { </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> Main(<span style="color: #0000ff;">string</span><span style="color: #000000;">[] args) { ObServer ob </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> ObServer(); ob.Changed </span>+=<span style="color: #000000;"> Change; ob.Trigger(</span><span style="color: #800000;">"</span><span style="color: #800000;">hello kitty</span><span style="color: #800000;">"</span><span style="color: #000000;">); Console.ReadLine(); } </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> Change(<span style="color: #0000ff;">string</span><span style="color: #000000;"> output) { Console.WriteLine(output); } } </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> ObServer { </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span> <span style="color: #808080;">///</span><span style="color: #008000;"> 事件 </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">event</span> Action<<span style="color: #0000ff;">string</span>><span style="color: #000000;"> Changed; </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span> <span style="color: #808080;">///</span><span style="color: #008000;"> 触发事件 </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span> <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="init"></param></span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> Trigger(<span style="color: #0000ff;">string</span><span style="color: #000000;"> init) { Changed(init); } }}</span>
同じ考えですが、イベントについての私の理解は実際には関数 A を実行すると、関数 B の処理が自動的に実行されます。上記の例では、init 実行時にデリゲートの変更が自動的に実行されるため、
Observer 自体が実行をバインドします。変更を実装しないでビジネスを開始したい。外部パーティにビジネスを処理することで、複雑なシステムの結合に対応できるようになります。
このアイデアを組み合わせると、PHP で同様のイベントを実装できます
<?<span style="color: #000000;">php</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> ObService{ </span><span style="color: #0000ff;">public</span> <span style="color: #800080;">$even</span> = <span style="color: #0000ff;">null</span><span style="color: #000000;">; </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> trigger(<span style="color: #800080;">$init</span><span style="color: #000000;">){ </span><span style="color: #008080;">call_user_func</span>(<span style="color: #800080;">$this</span>->even, <span style="color: #800080;">$init</span><span style="color: #000000;">); }}</span><span style="color: #800080;">$ob</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> ObService();</span><span style="color: #800080;">$ob</span>->even = "Chanage"<span style="color: #000000;">;</span><span style="color: #800080;">$ob</span>->trigger("hello kitty!"<span style="color: #000000;">);</span><span style="color: #0000ff;">function</span> Chanage(<span style="color: #800080;">$str</span><span style="color: #000000;">){ </span><span style="color: #0000ff;">echo</span>(<span style="color: #800080;">$str</span><span style="color: #000000;">);}</span>?>
要約: 実際に実装する PHP のコードは確認していませんイベントは個人的な理解に基づいており、C# コードと組み合わせてイベントを実装します。