首頁 > 後端開發 > php教程 > PHP5+标准函数库观察者之实现_PHP教程

PHP5+标准函数库观察者之实现_PHP教程

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
發布: 2016-07-13 10:19:25
原創
1002 人瀏覽過

PHP5+标准函数库观察者之实现

PHP的观察者设计模式实现相对简单,但是PHP5+版本中已经有标准库类库支持,我们只需简单继承并实现就可以了。

观察者:实现标准接口类库SplSubject。一个注册方法:attach,一个取消注册方法:detach。一个通知方法:nofity。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

<?php

 

class TSPLSubject implements SplSubject{

 

     private $observers, $value;

 

     public function __construct(){

        $this->observers =array();

     }

 

     public function attach(SplObserver $observer){

        $this->observers[] = $observer;

     }

 

     public function detach(SplObserver $observer){

        if($idx = array_search($observer, $this->observers,true)) {

            unset($this->observers[$idx]);

        }

     }

      

    /**

     *

     * Notify observers one by one (main entry)

     *

     * @param none

     * @return none

     */

     public function notify(){

        foreach($this->observers as $observer){

            $observer->update($this);

        }

     }

 

     public function setValue($value){

        $this->value = $value;

        //$this->notify();

     }

 

     public function getValue(){

         return $this->value;

     }

}

登入後複製

被观察者:实现标准接口类库SplObserver。一个update方法。

1

2

3

4

5

6

7

8

<?php

 

class TSPLObserver implements SplObserver{

     public function update(SplSubject $subject){

         echo &#39;The new state of subject &#39; , nl2br("\r\n");

//       echo &#39;The new state of subject &#39;.$subject->getValue();

     }

}

登入後複製

1

2

3

4

5

6

7

8

<?php

 

class TSPLObserver1 implements SplObserver{

     public function update(SplSubject $subject){

         echo &#39;The new state of subject one &#39; , nl2br("\r\n");

//       echo &#39;The new state of subject &#39;.$subject->getValue();

     }

}

登入後複製


测试调用(同目录下):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<?php

 

function __autoload($classname) {

  require_once ($classname . ".php");

}

 

$subject = new TSPLSubject();

$subject->attach(new TSPLObserver());

$observer1 = new TSPLObserver1();

$subject->attach($observer1);

//$subject->attach(new TSPLObserver2());

//$subject->detach($observer1);

 

$subject->notify();

 

exit();

登入後複製

输出:

>php basic.php
The new state of subject

The new state of subject one

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/875469.htmlTechArticlePHP5+标准函数库观察者之实现 PHP的观察者设计模式实现相对简单,但是PHP5版本中已经有标准库类库支持,我们只需简单继承并实现就可以了...
相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板