Heim > Backend-Entwicklung > PHP-Tutorial > 依据C# 事件思想来实现 php 事件

依据C# 事件思想来实现 php 事件

WBOY
Freigeben: 2016-06-13 12:21:24
Original
1002 Leute haben es durchsucht

根据C# 事件思想来实现 php 事件

事件定义

当我们使用委托场景时,我们很希望有这样两个角色出现:广播者和订阅者。我们需要这两个角色来实现订阅和广播这种很常见的场景。

广播者这个角色应该有这样的功能:包括一个委托字段,通过调用委托来发出广播。而订阅者应该有这样的功能:可以通过调用 += 和 -= 来决定何时开始或停止订阅。

事件就是描述这种场景模式的一个词。事件是委托的一个子集,为了满足“广播/订阅”模式的需求而生。

 

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></summary></span>        <span style="color: #808080;">///</span><span style="color: #008000;"> 事件        </span><span style="color: #808080;">///</span> <span style="color: #808080;"></span>        <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">event</span> Actionstring><span style="color: #000000;"> Changed;        </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></summary></span>        <span style="color: #808080;">///</span><span style="color: #008000;"> 触发事件        </span><span style="color: #808080;">///</span> <span style="color: #808080;"></span>        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="init"></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>
Nach dem Login kopieren

 

 同样的思路, 我的理解事件其实就是一种 执行A函数的时候自动执行B 函数过程,上面列子对照就只执行 init 的时候自动触发委托的 changing 从而绑定执行print,重点是在 

Observer 本身自己不实现changing 想刚业务把业务交由外面来处理这样在处理复杂系统的耦合提供便利。

结合这个思路那么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>?>
Nach dem Login kopieren

 

总结: 以上我也没查php 真正实现事件的代码,只是根据个人理解 ,结合C#代码来实现事件。

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage