suchen
HeimBackend-EntwicklungPHP-Tutorialphp观察者模式简单示例

  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(); //通过所有有效的观察者
复制代码

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



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
PHP und Python: Verschiedene Paradigmen erklärtPHP und Python: Verschiedene Paradigmen erklärtApr 18, 2025 am 12:26 AM

PHP ist hauptsächlich prozedurale Programmierung, unterstützt aber auch die objektorientierte Programmierung (OOP). Python unterstützt eine Vielzahl von Paradigmen, einschließlich OOP, funktionaler und prozeduraler Programmierung. PHP ist für die Webentwicklung geeignet, und Python eignet sich für eine Vielzahl von Anwendungen wie Datenanalyse und maschinelles Lernen.

PHP und Python: Ein tiefes Eintauchen in ihre GeschichtePHP und Python: Ein tiefes Eintauchen in ihre GeschichteApr 18, 2025 am 12:25 AM

PHP entstand 1994 und wurde von Rasmuslerdorf entwickelt. Es wurde ursprünglich verwendet, um Website-Besucher zu verfolgen und sich nach und nach zu einer serverseitigen Skriptsprache entwickelt und in der Webentwicklung häufig verwendet. Python wurde Ende der 1980er Jahre von Guidovan Rossum entwickelt und erstmals 1991 veröffentlicht. Es betont die Lesbarkeit und Einfachheit der Code und ist für wissenschaftliche Computer, Datenanalysen und andere Bereiche geeignet.

Wählen Sie zwischen PHP und Python: Ein LeitfadenWählen Sie zwischen PHP und Python: Ein LeitfadenApr 18, 2025 am 12:24 AM

PHP eignet sich für Webentwicklung und schnelles Prototyping, und Python eignet sich für Datenwissenschaft und maschinelles Lernen. 1.PHP wird für die dynamische Webentwicklung verwendet, mit einfacher Syntax und für schnelle Entwicklung geeignet. 2. Python hat eine kurze Syntax, ist für mehrere Felder geeignet und ein starkes Bibliotheksökosystem.

PHP und Frameworks: Modernisierung der SprachePHP und Frameworks: Modernisierung der SpracheApr 18, 2025 am 12:14 AM

PHP bleibt im Modernisierungsprozess wichtig, da es eine große Anzahl von Websites und Anwendungen unterstützt und sich den Entwicklungsbedürfnissen durch Frameworks anpasst. 1.PHP7 verbessert die Leistung und führt neue Funktionen ein. 2. Moderne Frameworks wie Laravel, Symfony und Codesigniter vereinfachen die Entwicklung und verbessern die Codequalität. 3.. Leistungsoptimierung und Best Practices verbessern die Anwendungseffizienz weiter.

Auswirkungen von PHP: Webentwicklung und darüber hinausAuswirkungen von PHP: Webentwicklung und darüber hinausApr 18, 2025 am 12:10 AM

PhPhas significantantyPactedWebDevelopmentAndendendsbeyondit.1) iTpowersMAjorPlatforms-LikewordpressandExcelsInDatabaseInteractions.2) php'SadaptabilityAllowStoscaleForLargeApplicationsfraMe-Linien-Linien-Linien-Linienkripte

Wie funktioniert der Php -Typ -Hinweis, einschließlich Skalartypen, Rückgabetypen, Gewerkschaftstypen und nullbaren Typen?Wie funktioniert der Php -Typ -Hinweis, einschließlich Skalartypen, Rückgabetypen, Gewerkschaftstypen und nullbaren Typen?Apr 17, 2025 am 12:25 AM

PHP -Typ -Eingabeaufforderungen zur Verbesserung der Codequalität und der Lesbarkeit. 1) Tipps zum Skalartyp: Da Php7.0 in den Funktionsparametern wie int, float usw. angegeben werden dürfen. 3) Eingabeaufforderung für Gewerkschaftstyp: Da Php8.0 in Funktionsparametern oder Rückgabetypen angegeben werden dürfen. 4) Nullierstyp Eingabeaufforderung: Ermöglicht die Einbeziehung von Nullwerten und Handlungsfunktionen, die Nullwerte zurückgeben können.

Wie handelt es sich bei PHP -Objektklonen (Klonschlüsselwort) und der __clone Magic -Methode?Wie handelt es sich bei PHP -Objektklonen (Klonschlüsselwort) und der __clone Magic -Methode?Apr 17, 2025 am 12:24 AM

Verwenden Sie in PHP das Klonschlüsselwort, um eine Kopie des Objekts zu erstellen und das Klonierungsverhalten über die \ _ \ _ Clone Magic -Methode anzupassen. 1. Verwenden Sie das Klonschlüsselwort, um eine flache Kopie zu erstellen und die Eigenschaften des Objekts, nicht die Eigenschaften des Objekts zu klonen. 2. Die \ _ \ _ Klonmethode kann verschachtelte Objekte tief kopieren, um flache Kopierprobleme zu vermeiden. 3. achten Sie darauf, dass kreisförmige Referenzen und Leistungsprobleme beim Klonen vermieden werden, und optimieren Sie die Klonierungsvorgänge, um die Effizienz zu verbessern.

PHP vs. Python: Anwendungsfälle und AnwendungenPHP vs. Python: Anwendungsfälle und AnwendungenApr 17, 2025 am 12:23 AM

PHP eignet sich für Webentwicklungs- und Content -Management -Systeme, und Python eignet sich für Datenwissenschafts-, maschinelles Lernen- und Automatisierungsskripte. 1.PHP hat eine gute Leistung beim Erstellen von schnellen und skalierbaren Websites und Anwendungen und wird üblicherweise in CMS wie WordPress verwendet. 2. Python hat sich in den Bereichen Datenwissenschaft und maschinelles Lernen mit reichen Bibliotheken wie Numpy und TensorFlow übertrifft.

See all articles

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 vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Sicherer Prüfungsbrowser

Sicherer Prüfungsbrowser

Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor