PHP 進階編程(3)_PHP教程

來源:互聯網
上載者:User
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介面可用來表達這些內容。

SplSubject {/* 方法 */abstract public void attach ( SplObserver $observer )abstract public void detach ( SplObserver $observer )abstract public void notify ( void )}
SplObserver {/* 方法 */abstract public void update ( SplSubject $subject )}

這裡,splsubject類維護了一個特定狀態,當這個狀態發生變化時,他就會調用notify方法,所以之前使用attach註冊的splobserver執行個體的update就會被調用。這裡我們實現一個簡單地觀察者模式的例子

php/** * Subject,that who makes news */class Newspaper implements \SplSubject{    private $name;    private $observers = array();    private $content;        public function __construct($name) {        $this->name = $name;    }    //add observer    public function attach(\SplObserver $observer) {        $this->observers[] = $observer;    }        //remove observer    public function detach(\SplObserver $observer) {                $key = array_search($observer,$this->observers, true);        if($key){            unset($this->observers[$key]);        }    }        //set breakouts news    public function breakOutNews($content) {        $this->content = $content;        $this->notify();    }        public function getContent() {        return $this->content." ({$this->name})";    }        //notify observers(or some of them)    public function notify() {        foreach ($this->observers as $value) {            $value->update($this);        }    }}/** * Observer,that who recieves news */class Reader implements SplObserver{    private $name;        public function __construct($name) {        $this->name = $name;    }        public function update(\SplSubject $subject) {        echo $this->name.' is reading breakout news '.$subject->getContent().'
'; }}$newspaper = new Newspaper('Newyork Times');$allen = new Reader('Allen');$jim = new Reader('Jim');$linda = new Reader('Linda');//add reader$newspaper->attach($allen);$newspaper->attach($jim);$newspaper->attach($linda);//remove reader$newspaper->detach($linda);//set break outs$newspaper->breakOutNews('USA break down!');//=====output======//Allen is reading breakout news USA break down! (Newyork Times)//Jim is reading breakout news USA break down! (Newyork Times)

http://www.bkjia.com/PHPjc/814842.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/814842.htmlTechArticleSPL(標準PHP庫 - Standard PHP Library)是PHP5物件導向功能中重要的部分。原文解釋是這樣的The Standard PHP Library (SPL) is a collection of interfaces and c...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.