Heim >Backend-Entwicklung >PHP-Tutorial >PHP5+标准函数库观察者之实现_PHP教程

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

WBOY
WBOYOriginal
2016-07-13 10:19:25949Durchsuche

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

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

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

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

<?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();
	 }
}
<?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();
	 }
}


测试调用(同目录下):

<?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版本中已经有标准库类库支持,我们只需简单继承并实现就可以了...
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