Explication détaillée du code de la prise en charge native de PHP pour le Modèle Observer
<?php // 观察者模式 // PHP(SPL)原生支持 /* 类摘要 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 ); } SplObjectStorage implements Countable, Iterator, Serializable, ArrayAccess { } */ class ConcreteSubject implements SplSubject { private $storage; public function construct() { $this->storage = new SplObjectStorage(); } public function attach(SplObserver $obs) { $this->storage->attach($obs); } public function detach(SplObserver $obs) { $this->storage->detach($obs); } public function notify() { foreach($this->storage as $ol) { $ol->update($this); } } public function doAct() { echo 'DoAct ... <br/>'; $this->notify(); } } /** * concrete observer 1 */ class Observer1 implements SplObserver { public function update(SplSubject $sub) { echo 'Observer one updated! <br/>'; } } /** * concrete observer 2 */ class Observer2 implements SplObserver { public function update(SplSubject $sub) { echo 'Observer two updated! <br/>'; } } // test code $sub = new ConcreteSubject(); $sub->attach(new Observer1()); //add observer $sub->attach(new Observer1()); $sub->attach(new Observer2()); $sub->doAct();
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!