Heim Backend-Entwicklung PHP-Tutorial php观察者模式简单示例

php观察者模式简单示例

Jul 25, 2016 am 08:52 AM

  1. //被察者抽象类
  2. class Observed implements SplSubject{
  3. protected $_name;
  4. protected $_observers;
  5. //实例化,生成观察者对象
  6. public function __construct(){
  7. $this->_observers = new SplObjectStorage();
  8. }
  9. // 添加观察者对象
  10. public function attach(SplObserver $observer){
  11. $this->_observers->attach($observer);
  12. }
  13. //删除观者对象
  14. public function detach(SplObserver $observer){
  15. $this->_observers->detach($observer);
  16. }
  17. //通知消息
  18. public function notify(){
  19. foreach($this->_observers as $observer){
  20. $observer->showMessage($this);
  21. }
  22. }
  23. //普通方法: 设置值
  24. public function setName($name){
  25. $this->_name = $name;
  26. $this->notify();
  27. }
  28. //普通方法: 获取值
  29. public function getName(){
  30. return $this->_name;
  31. }
  32. //普通方法:设置年龄
  33. public function setAge($age){
  34. $this->age = $age;
  35. foreach($this->_observers as $observer){
  36. $observer->showAge($this->_name,$this->age);
  37. }
  38. }
  39. }
  40. // 观察者抽象类
  41. class Observer implements SplObserver{
  42. //显示消息提示
  43. public function showMessage(SplSubject $obj){
  44. $user = $obj->getName();
  45. if($user==='admin'){
  46. echo '您好, ',$user,'欢迎您进入管理后台
    ';
  47. }else{
  48. echo "你好, '$user' 你已经被添加到了用户列表
    ";
  49. }
  50. }
  51. //这是继承父类的抽象方法
  52. public function update(SplSubject $subject) {}
  53. //显示个人年龄
  54. public function showAge($name,$age){
  55. echo "<script>alert('$name 的年龄是: $age')</script>";
  56. }
  57. }
  58. $subject = new Observed(); //生成一个被观察者对象
  59. $observer = new Observer(); //生成一个观察者对象
  60. $subject->attach($observer);//把观察者传入到被观察中去
  61. $subject->setName('张三'); //调用 setName 方法
  62. /*
  63. * 通过面的 setName 就会调用 $this->notify();
  64. * 通过调用 $this->notify()就会调用 $observer->showMessage($this)方法,
  65. * 即每个观察者对象的 showMessage($obj)方法;
  66. */
  67. $subject->setName('admin');
  68. $subject->setAge(24);
复制代码

例2,观察者模式:

  1. interface Subject
  2. {
  3. public function Attach($Observer); //添加观察者
  4. public function Detach($Observer); //踢出观察者
  5. public function Notify(); //满足条件时通知观察者
  6. public function SubjectState($Subject); //观察条件
  7. }
  8. class Boss Implements Subject
  9. {
  10. public $_action;
  11. private $_Observer;
  12. public function Attach($Observer)
  13. {
  14. $this->_Observer[] = $Observer;
  15. }
  16. public function Detach($Observer)
  17. {
  18. $ObserverKey = array_search($Observer, $this->_Observer);
  19. if($ObserverKey !== false)
  20. {
  21. unset($this->_Observer[$ObserverKey]);
  22. }
  23. }
  24. public function Notify()
  25. {
  26. foreach($this->_Observer as $value )
  27. {
  28. $value->Update();
  29. }
  30. }
  31. public function SubjectState($Subject)
  32. {
  33. $this->_action = $Subject;
  34. }
  35. }
  36. abstract class Observer
  37. {
  38. protected $_UserName;
  39. protected $_Sub;
  40. public function __construct($Name,$Sub)
  41. {
  42. $this->_UserName = $Name;
  43. $this->_Sub = $Sub;
  44. }
  45. public abstract function Update(); //接收通过方法
  46. } // bbs.it-home.org
  47. class StockObserver extends Observer
  48. {
  49. public function __construct($name,$sub)
  50. {
  51. parent::__construct($name,$sub);
  52. }
  53. public function Update()
  54. {
  55. echo $this->_Sub->_action.$this->_UserName." 你赶快跑...";
  56. }
  57. }
  58. $huhansan = new Boss(); //被观察者
  59. $gongshil = new StockObserver("三毛",$huhansan); //初始化观察者
  60. $huhansan->Attach($gongshil); //添加一个观察者
  61. $huhansan->Attach($gongshil); //添加一个相同的观察者
  62. $huhansan->Detach($gongshil); //踢出基中一个观察者
  63. $huhansan->SubjectState("警察来了"); //达到满足的条件
  64. $huhansan->Notify(); //通过所有有效的观察者
复制代码

说明: 一个类(我们称之为被观察者),这个类继承了一个被观察者容器的借口 该接口中方法有:添加观察者,踢出观察者,提醒观察者,和观察条件 添加观察者,即相当于把一些类注册到这个容器之中,当然这些类的前提是需要有一个相应被观察者反应信息的方法, 被观察者容器通过接受不同的观察条件参数来判断是否需要提醒所有本容器中的已经注册过的观察者是否相应。 一旦满足提醒条件,提醒容器内所有观察者让其调用相应方法并且实现对应观察者实例的变化。



Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Apr 03, 2025 am 12:04 AM

Die Anwendung des soliden Prinzips in der PHP -Entwicklung umfasst: 1. Prinzip der Einzelverantwortung (SRP): Jede Klasse ist nur für eine Funktion verantwortlich. 2. Open and Close Principle (OCP): Änderungen werden eher durch Erweiterung als durch Modifikation erreicht. 3.. Lischs Substitutionsprinzip (LSP): Unterklassen können Basisklassen ersetzen, ohne die Programmgenauigkeit zu beeinträchtigen. 4. Schnittstellen-Isolationsprinzip (ISP): Verwenden Sie feinkörnige Schnittstellen, um Abhängigkeiten und nicht verwendete Methoden zu vermeiden. 5. Abhängigkeitsinversionsprinzip (DIP): Hoch- und niedrige Module beruhen auf der Abstraktion und werden durch Abhängigkeitsinjektion implementiert.

Erklären Sie das Konzept der späten statischen Bindung in PHP. Erklären Sie das Konzept der späten statischen Bindung in PHP. Mar 21, 2025 pm 01:33 PM

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Apr 01, 2025 pm 03:12 PM

Senden von JSON -Daten mithilfe der Curl -Bibliothek von PHP in der PHP -Entwicklung müssen häufig mit externen APIs interagieren. Eine der gängigen Möglichkeiten besteht darin, die Curl Library zu verwenden, um Post � ...

Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Mar 28, 2025 pm 05:11 PM

In Artikel werden wichtige Sicherheitsfunktionen in Frameworks erörtert, um vor Schwachstellen zu schützen, einschließlich Eingabevalidierung, Authentifizierung und regelmäßigen Aktualisierungen.

Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Mar 31, 2025 pm 11:54 PM

So setzen Sie die Berechtigungen von Unixsocket automatisch nach dem Neustart des Systems. Jedes Mal, wenn das System neu startet, müssen wir den folgenden Befehl ausführen, um die Berechtigungen von Unixsocket: sudo ...

Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Anpassung/Erweiterung von Frameworks: So fügen Sie benutzerdefinierte Funktionen hinzu. Mar 28, 2025 pm 05:12 PM

In dem Artikel werden Frameworks hinzugefügt, das sich auf das Verständnis der Architektur, das Identifizieren von Erweiterungspunkten und Best Practices für die Integration und Debuggierung hinzufügen.

See all articles