Heim  >  Artikel  >  Backend-Entwicklung  >  PHP5+标准函数库观察者之实现

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

WBOY
WBOYOriginal
2016-06-23 13:50:16925Durchsuche

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

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

<?phpclass 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方法。

<?phpclass TSPLObserver implements SplObserver{	 public function update(SplSubject $subject){		 echo 'The new state of subject ' , nl2br("\r\n");//		 echo 'The new state of subject '.$subject->getValue();	 }}
<?phpclass TSPLObserver1 implements SplObserver{	 public function update(SplSubject $subject){		 echo 'The new state of subject one ' , nl2br("\r\n");//		 echo 'The new state of subject '.$subject->getValue();	 }}


测试调用(同目录下):

<?phpfunction __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

Stellungnahme:
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
Vorheriger Artikel:mysql怎么搜emoji?Nächster Artikel:php 数据库添加失败