SPL(标准PHP库 - Standard PHP Library)是PHP5面向对象功能中重要的部分。原文解释是这样的“The Standard PHP Library (SPL) is a collection of interfaces and classes that are meant to solve common problems”。
SplSubject 和 SplObserver 接口
The SplSubject interface is used alongside SplObserver to implement the Observer Design Pattern.
观察者模式是一种简单的事件系统,包含了两个或更多的互相交互的类。这一模式允许某个类观察另一个类的状态,当被观察类的状态发生变化时,这个模式会得到通知。被观察的类叫subject,负责观察的类叫做Observer 。PHP 提供的 SplSubject 和 SplObserver接口可用来表达这些内容。
<span>SplSubject { </span><span>/*</span><span> 方法 </span><span>*/</span> <span>abstract</span> <span>public</span> <span>void</span><span> attach ( SplObserver $observer ) </span><span>abstract</span> <span>public</span> <span>void</span><span> detach ( SplObserver $observer ) </span><span>abstract</span> <span>public</span> <span>void</span> notify ( <span>void</span><span> ) }</span>
<span>SplObserver { </span><span>/*</span><span> 方法 </span><span>*/</span> <span>abstract</span> <span>public</span> <span>void</span><span> update ( SplSubject $subject ) }</span>
这里,splsubject类维护了一个特定状态,当这个状态发生变化时,他就会调用notify方法,所以之前使用attach注册的splobserver实例的update就会被调用。这里我们实现一个简单地观察者模式的例子
<?<span>php </span><span>/*</span><span>* * Subject,that who makes news </span><span>*/</span> <span>class</span><span> Newspaper implements \SplSubject{ </span><span>private</span><span> $name; </span><span>private</span> $observers =<span> array(); </span><span>private</span><span> $content; </span><span>public</span><span> function __construct($name) { $</span><span>this</span>->name =<span> $name; } </span><span>//</span><span>add observer</span> <span>public</span><span> function attach(\SplObserver $observer) { $</span><span>this</span>->observers[] =<span> $observer; } </span><span>//</span><span>remove observer</span> <span>public</span><span> function detach(\SplObserver $observer) { $key </span>= array_search($observer,$<span>this</span>->observers, <span>true</span><span>); </span><span>if</span><span>($key){ unset($</span><span>this</span>-><span>observers[$key]); } } </span><span>//</span><span>set breakouts news</span> <span>public</span><span> function breakOutNews($content) { $</span><span>this</span>->content =<span> $content; $</span><span>this</span>-><span>notify(); } </span><span>public</span><span> function getContent() { </span><span>return</span> $<span>this</span>->content.<span>"</span><span> ({$this->name})</span><span>"</span><span>; } </span><span>//</span><span>notify observers(or some of them)</span> <span>public</span><span> function notify() { </span><span>foreach</span> ($<span>this</span>->observers <span>as</span><span> $value) { $value</span>->update($<span>this</span><span>); } } } </span><span>/*</span><span>* * Observer,that who recieves news </span><span>*/</span> <span>class</span><span> Reader implements SplObserver{ </span><span>private</span><span> $name; </span><span>public</span><span> function __construct($name) { $</span><span>this</span>->name =<span> $name; } </span><span>public</span><span> function update(\SplSubject $subject) { echo $</span><span>this</span>->name.<span>'</span><span> is reading breakout news <b></span><span>'</span>.$subject->getContent().<span>'</span><span></b><br></span><span>'</span><span>; } } $newspaper </span>= <span>new</span> Newspaper(<span>'</span><span>Newyork Times</span><span>'</span><span>); $allen </span>= <span>new</span> Reader(<span>'</span><span>Allen</span><span>'</span><span>); $jim </span>= <span>new</span> Reader(<span>'</span><span>Jim</span><span>'</span><span>); $linda </span>= <span>new</span> Reader(<span>'</span><span>Linda</span><span>'</span><span>); </span><span>//</span><span>add reader</span> $newspaper-><span>attach($allen); $newspaper</span>-><span>attach($jim); $newspaper</span>-><span>attach($linda); </span><span>//</span><span>remove reader</span> $newspaper-><span>detach($linda); </span><span>//</span><span>set break outs</span> $newspaper->breakOutNews(<span>'</span><span>USA break down!</span><span>'</span><span>); </span><span>//</span><span>=====output====== </span><span>//</span><span>Allen is reading breakout news USA break down! (Newyork Times) </span><span>//</span><span>Jim is reading breakout news USA break down! (Newyork Times)</span>

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

WebStorm Mac版
便利なJavaScript開発ツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

メモ帳++7.3.1
使いやすく無料のコードエディター
