PHPはSPLObserverインターフェース二つのインターフェース、観察SplSubjectへのインタフェース、一つまたはそれ以上の視聴者を提供し、クラスオブジェクトを格納することができるSplObjectStorage。三つの方法がオブザーバーは、オブザーバーを追加添付として理解することができ、これらの3つのメソッドを実装する必要がループに通知行うオブザーバーとして理解することができ、削除切り離しがありますが、オブザーバのupdateメソッド(オブザーバーを実行しますクラスにそのSplObjectStorageに基づいている)、本パスの更新方法パラメータが格納されます。
<?PHP ヘッダ(" コンテンツタイプ:text / htmlの;のcharset = UTF-8 " )。 / * * * * / クラスログイン実装SplSubject { 公共$趣味。 公共の$ loginTimes。 保護 $オブザーバー= nullを。 関数__construct($趣味) { $ この - >趣味= $趣味。 $ この - > loginTimes =ランド(1、10 )。 $ この - >オブザーバー= 新しいSplObjectStorage(); } 公共機能のログイン() { // で書かれたログインのビジネスロジック $ この - > 通知(); } 公共の機能が添付(SPLObserver $オブザーバー) { $ これを > observers-> - ;($オブザーバー)を取り付け } パブリック関数デタッチ(SPLObserver $オブザーバ) { $ この > observers-> - ;デタッチ($オブザーバを) } 公共の関数は(通知) { // の$ this - > observers->リワインド(); // の先頭に内部ポインタ // 一方(の$ this - > observers->有効()){ // $オブザーバ=の$ this - > observers->現在(); // 現在のオブジェクト取得 // > $ observer-を更新($この); // ます$ this-> observers->次の(); // ダウンするポインタ // } foreachの($ この - >オブザーバーAS $値){ $値 - >更新($ この)。 } } } // ユーザープッシュ-オブザーバ クラスPushUser実装SplObserver { 公共の機能アップデート(SplSubject $件名)// ビューアーによって渡されたが 、{ // 独自のビジネスロジックを記述 IF($サブジェクト>ホビー== 「スポーツ」){ エコー「スポーツ製品は<BR>プッシュ」。 } 他{ エコー「プッシュホット製品<BR> 」。 } } } // セキュリティ情報のプッシュ-オブザーバ クラスPushSecurity実装SplObserver { 公共の機能アップデート(SplSubject $件名)// ビューアーによって渡されたが 、{ // 独自のビジネスロジックを記述 IF($サブジェクト> logintimes < 5 ){ エコー「あなたの最初の日」 $サブジェクト> logintimes .. 「回セキュアなログイン<BR> 」。 } 他{ エコー「あなたの最初の日」 $サブジェクト> logintimes .. 「回セキュアログイン、異常<BR>ログイン」。 } } } // ニュースフィード-オブザーバ クラスPushNews実装SplObserver { 公共の機能更新(SplSubject $対象) { // 彼らのビジネスロジックを記述 IF($サブジェクト>ホビー== ' スポーツ' ){ エコー「プッシュスポーツニュース<BR> 」。 } 他{ エコー「ホットニュース<BR>を押して」; } } } ユーザー$ = 新しい新しいログイン(「スポーツ」); // 観測されたのインタフェースクラスの実装作成 する$ user->(添付新しい新しい PushNewsを()); //は、インタフェースクラスオブザーバの一の実装で渡し する$ user-を>添付(新新PushUser()); $ユーザー - >添付(新しいPushSecurity()); $ユーザー - >ログイン();