Inhaltsverzeichnis
Code-Implementierung
Bindung auf Objektebene
Aber es gibt ein Problem. Das obige Ereignis richtet sich an das von
Heim Backend-Entwicklung PHP-Tutorial Detaillierte Erläuterung von Beispielen für EVENT-Ereignisse in Yii2

Detaillierte Erläuterung von Beispielen für EVENT-Ereignisse in Yii2

Aug 13, 2017 am 09:08 AM
event yii2 实例

Einführung in Ereignisse

Mithilfe von Ereignissen können Sie die Ausführung eines voreingestellten Codeabschnitts zu einem bestimmten Zeitpunkt auslösen. Ereignisse sind nicht nur eine Möglichkeit, Code zu entkoppeln, sondern auch eine Möglichkeit der Gestaltung von Geschäftsprozessen. In moderner Software gibt es überall Ereignisse. Wenn Sie beispielsweise ein Weibo veröffentlichen, wird ein Ereignis ausgelöst, das dazu führt, dass Personen, die Ihnen folgen, Ihre neuen Inhalte sehen. Bei Veranstaltungen gibt es mehrere Elemente:

  • Was ist das für eine Veranstaltung? In einem Softwaresystem gibt es viele Ereignisse. Das Veröffentlichen eines neuen Weibo ist ein Ereignis, und das Löschen eines Weibo ist ebenfalls ein Ereignis.

  • Wer hat das Ereignis ausgelöst? Was Sie auf Weibo posten, ist das Ereignis, das Sie auslösen.

  • Wer ist für die Überwachung dieses Ereignisses verantwortlich? Oder wer weiß, dass dieses Ereignis passiert ist? Das Modul auf dem Server, das die Benutzerregistrierung verwaltet, wird Ihr neues Weibo-Event definitiv nicht empfangen. Wie gehe ich mit dem

  • -Ereignis um? Für den Fall, dass ein neues Weibo veröffentlicht wird, dient dies dazu, andere Benutzer zu benachrichtigen, die Ihnen folgen.

  • Was sind die ereignisbezogenen Daten? Für die Veröffentlichung eines neuen Weibo-Ereignisses müssen die enthaltenen Daten mindestens den Inhalt des neuen Weibo, die Uhrzeit usw. umfassen.

Code-Implementierung

Bindung auf Objektebene

Falleinführung: Da ist eine Katze, und die Maus rennt weg, wenn sie bellt
Um diesen Fall umzusetzen, erstellen wir den Ereignisordner im frontend
-Ordner Es gibt 2 Klassendateien im 🎜>Ereignisordner , eine Cat-Klasse und eine Mouse-Klasse

<?php

namespace frontend\event;

/**
 * 猫类
 * Class: \frontend\event\Cat
 * 
 * 为了让猫具有事件能力
 * 所以要继承 \yii\base\Component
 * >>> \yii\base\Component 对 \yii\base\Event 的 on 方法进行重写
 * >>> \yii\base\Event 适合类级绑定
 * >>> \yii\base\Component 适合对象级绑定
 */
class Cat extends \yii\base\Component
{
    /**
     * 猫发出叫声
     */
    public function shout()
    {
        echo &#39;猫:miao miao miao <br />&#39;;
        
        // 猫叫了之后 触发猫的 miao 事件
        $this->trigger(&#39;miao&#39;);
    }
}
Nach dem Login kopieren
Mouse. php

<?php

namespace frontend\event;

/**
 * 老鼠类
 * Class: \frontend\event\Mouse
 */
class Mouse
{
    public function run()
    {
        echo &#39;老鼠:有猫来了,赶紧跑啊~~<br />&#39;;
    }
}
Nach dem Login kopieren
EventController.php

<?php

namespace frontend\controllers;

use frontend\event\Cat;
use frontend\event\Mouse;

/**
* Class: \frontend\controllers\Event
*/
class EventController extends \yii\web\Controller
{
    public function actionTest()
    {
        $cat = new Cat();
        $mouse = new Mouse();

        // 需事先给猫绑定 miao 事件才可以触发此事件
        // 猫一叫,就触发老鼠的 run 方法
        $cat->on(&#39;miao&#39;, [$mouse, &#39;run&#39;]);

        // 猫发出叫声
        $cat->shout();
    }
}
Nach dem Login kopieren
Geben Sie http://yourdomain.com/?r=event/test

in den Browser ein, um
<🎜 zu erhalten >

durch Anrufen der Katze Die Shout-Methode löst das Miao-Ereignis aus und die Maus rennt weg
猫:miao miao miao 
老鼠:有猫来了,赶紧跑啊~~
Nach dem Login kopieren

Plötzlich, eines Tages, schließt sich der Hund diesem Fall an. Solange die Katze bellt, geht der Hund zur Katze

so steht es auch im Event-Ordner

Hundemitglied Dog.php hinzufügen

Frontend/controllers/EventController.php ändern
<?php

namespace frontend\event;

/**
 * Class \frontend\event\Dog
 */
class Dog extends \yii\base\Component
{
    /**
     * 找猫
     */
    public function findCat()
    {
        echo &#39;狗:wang wang wang, 猫在哪里??&#39;;
    }
}
Nach dem Login kopieren
Hund sucht Katze-Event hinzufügen


http im Browser aktualisieren ://yourdomain.com/?r=event/test
...
// 需事先给猫绑定 miao 事件才可以触发此事件
// 猫一叫,就触发老鼠的 run 方法
$cat->on(&#39;miao&#39;, [$mouse, &#39;run&#39;]);
$cat->on(&#39;miao&#39;, [$dog, &#39;findCat&#39;]); // 添加狗找猫事件

// 让猫发出叫声
$cat->shout();
...
Nach dem Login kopieren
Get


Plötzlich langweilte sich der Hund und wollte nicht zum Katze mehr, also bellte er, was immer er wollte
猫:miao miao miao 
老鼠:有猫来了,赶紧跑啊~~
狗:wang wang wang, 猫在哪里??
Nach dem Login kopieren
Dann müssen wir nur noch den Hund losbinden, der nach dem Katzenereignis sucht

frontend/controllers/EventController.php ändern

So das Endergebnis wird natürlich das Geräusch des Hundes fehlen
use frontend\event\Cat;
use frontend\event\Mouse;
use frontend\event\Dog;
...
public function actionTest()
{
    $cat = new Cat();
    $mouse = new Mouse();
    $dog = new Dog();

    // 需事先给猫绑定 miao 事件才可以触发此事件
    // 猫一叫,就触发老鼠的 run 方法
    $cat->on(&#39;miao&#39;, [$mouse, &#39;run&#39;]);
    $cat->on(&#39;miao&#39;, [$dog, &#39;findCat&#39;]);

    // 并非直接删除 $cat->on(&#39;miao&#39;, [$dog, &#39;findCat&#39;]);
    // 而是通过 off 解除绑定
    $cat->off(&#39;miao&#39;, [$dog, &#39;findCat&#39;]);

    // 让猫发出叫声
    $cat->shout();
}
...
Nach dem Login kopieren

Bindung auf Klassenebene

Aber es gibt ein Problem. Das obige Ereignis richtet sich an das von

$cat

zugewiesene Objekt, das heißt, fügen Sie am Ende der actionTest-Methode in frontend/controllers/EventController.php hinzu (new Cat())->shout();
löst das Miao-Ereignis nicht aus

Grund:
public function actionTest()
{
    ... 

    // 让猫发出叫声
    $cat->shout(); // 会触发 miao 事件
    (new Cat())->shout(); // 不会触发 miao 事件
}
Nach dem Login kopieren
Sind alle Ereignisse durch das $cat-Objekt gebunden

Gibt es eine Möglichkeit, dass Mäuse weglaufen, solange das Geräusch von einer Katze erzeugt wird? ? Dies erfordert die Verwendung von
Ereignisbindung auf Klassenebene

Ereignisbindung auf Klassenebene erfordert die Verwendung der yiibaseEvent-Klasse

Frontend/Controller ändern / EventController.php

Aktualisieren Sie die Seite und erhalten Sie
use frontend\event\Cat;
use frontend\event\Mouse;
use yii\base\Event;
...
public function actionTest()
{
    $cat = new Cat();
    $mouse = new Mouse();

    // 类级别的事件绑定
    // 只要猫发出声音,不管是什么猫,都会触发老鼠的 run 方法
    Event::on(Cat::className() ,&#39;miao&#39;, [$mouse, &#39;run&#39;]);

    // 让猫发出叫声
    $cat->shout(); // 会触发 miao 事件
    (new Cat())->shout(); // 会触发 miao 事件
}
Nach dem Login kopieren

Zusammenfassung
猫:miao miao miao 
老鼠:有猫来了,赶紧跑啊~~
猫:miao miao miao 
老鼠:有猫来了,赶紧跑啊~~
Nach dem Login kopieren

    Ereignisbindungsklassifizierung auf Objektebene und Klassenebenenbindung
  • Objektebene gilt nur für ein bestimmtes instanziiertes Objekt
  • Klassenebene gilt für alle instanziierten Objekte
  • Sollten im obigen Verständnis Fehler enthalten sein, können Sie diese gerne ansprechen und korrigieren

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von Beispielen für EVENT-Ereignisse in Yii2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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)

SVM-Beispiele in Python SVM-Beispiele in Python Jun 11, 2023 pm 08:42 PM

Support Vector Machine (SVM) in Python ist ein leistungsstarker überwachter Lernalgorithmus, der zur Lösung von Klassifizierungs- und Regressionsproblemen verwendet werden kann. SVM eignet sich gut für den Umgang mit hochdimensionalen Daten und nichtlinearen Problemen und wird häufig in den Bereichen Data Mining, Bildklassifizierung, Textklassifizierung, Bioinformatik und anderen Bereichen eingesetzt. In diesem Artikel stellen wir ein Beispiel für die Verwendung von SVM zur Klassifizierung in Python vor. Wir werden das SVM-Modell aus der scikit-learn-Bibliothek verwenden

So entfernen Sie Jquery in yii2 So entfernen Sie Jquery in yii2 Feb 17, 2023 am 09:55 AM

So entfernen Sie jquery aus yii2: 1. Bearbeiten Sie die Datei AppAsset.php und kommentieren Sie den Wert „yii\web\YiiAsset“ in der Variablen $depends aus. 2. Bearbeiten Sie die Datei main.php und fügen Sie die Konfiguration als „'yii“ hinzu. unter dem Feld „components“ \web\JqueryAsset' => ['js' => [],'sourcePath' => null,]“, um das JQuery-Skript zu entfernen.

Ereignisverarbeitungsbibliothek in PHP8.0: Ereignis Ereignisverarbeitungsbibliothek in PHP8.0: Ereignis May 14, 2023 pm 05:40 PM

Ereignisverarbeitungsbibliothek in PHP8.0: Ereignis Mit der kontinuierlichen Entwicklung des Internets wird PHP als beliebte Back-End-Programmiersprache häufig bei der Entwicklung verschiedener Webanwendungen verwendet. In diesem Prozess ist der ereignisgesteuerte Mechanismus zu einem sehr wichtigen Teil geworden. Die Ereignisverarbeitungsbibliothek Event in PHP8.0 bietet uns eine effizientere und flexiblere Ereignisverarbeitungsmethode. Was ist Event-Handling? Event-Handling ist ein sehr wichtiges Konzept bei der Entwicklung von Webanwendungen. Ereignisse können jede Art von Benutzerzeile sein

VUE3-Erste-Schritte-Beispiel: Erstellen eines einfachen Videoplayers VUE3-Erste-Schritte-Beispiel: Erstellen eines einfachen Videoplayers Jun 15, 2023 pm 09:42 PM

Da die neue Generation von Front-End-Frameworks weiter auf dem Vormarsch ist, erfreut sich VUE3 als schnelles, flexibles und benutzerfreundliches Front-End-Framework großer Beliebtheit. Als Nächstes lernen wir die Grundlagen von VUE3 kennen und erstellen einen einfachen Videoplayer. 1. VUE3 installieren Zuerst müssen wir VUE3 lokal installieren. Öffnen Sie das Befehlszeilentool und führen Sie den folgenden Befehl aus: npminstallvue@next Erstellen Sie dann eine neue HTML-Datei und führen Sie VUE3 ein: &lt;!doctypehtml&gt;

Erfahren Sie Best-Practice-Beispiele für die Zeigerkonvertierung in Golang Erfahren Sie Best-Practice-Beispiele für die Zeigerkonvertierung in Golang Feb 24, 2024 pm 03:51 PM

Golang ist eine leistungsstarke und effiziente Programmiersprache, mit der sich verschiedene Anwendungen und Dienste entwickeln lassen. In Golang sind Zeiger ein sehr wichtiges Konzept, das uns helfen kann, Daten flexibler und effizienter zu verwalten. Die Zeigerkonvertierung bezieht sich auf den Prozess der Zeigeroperation zwischen verschiedenen Typen. In diesem Artikel werden anhand konkreter Beispiele die Best Practices der Zeigerkonvertierung in Golang erläutert. 1. Grundkonzepte In Golang hat jede Variable eine Adresse, und die Adresse ist der Speicherort der Variablen im Speicher.

Beispiel für die Entwicklung eines einfachen PHP-Webcrawlers Beispiel für die Entwicklung eines einfachen PHP-Webcrawlers Jun 13, 2023 pm 06:54 PM

Mit der rasanten Entwicklung des Internets sind Daten zu einer der wichtigsten Ressourcen im heutigen Informationszeitalter geworden. Als Technologie zur automatischen Erfassung und Verarbeitung von Netzwerkdaten erregen Webcrawler immer mehr Aufmerksamkeit und Anwendung. In diesem Artikel wird erläutert, wie Sie mit PHP einen einfachen Webcrawler entwickeln und die Funktion zum automatischen Abrufen von Netzwerkdaten realisieren. 1. Überblick über Web Crawler Web Crawler ist eine Technologie, die automatisch Netzwerkressourcen abruft und verarbeitet. Ihr Hauptarbeitsprozess besteht darin, das Browserverhalten zu simulieren, automatisch auf bestimmte URL-Adressen zuzugreifen und alle Informationen zu extrahieren.

Beispiel für einen VAE-Algorithmus in Python Beispiel für einen VAE-Algorithmus in Python Jun 11, 2023 pm 07:58 PM

VAE ist ein generatives Modell. Der vollständige Name lautet VariationalAutoencoder, was ins Chinesische als Variational Autoencoder übersetzt wird. Es handelt sich um einen unbeaufsichtigten Lernalgorithmus, der zur Generierung neuer Daten wie Bilder, Audio, Text usw. verwendet werden kann. Im Vergleich zu herkömmlichen Autoencodern sind VAEs flexibler und leistungsfähiger und können komplexere und realistischere Daten generieren. Python ist eine der am weitesten verbreiteten Programmiersprachen und eines der wichtigsten Werkzeuge für Deep Learning. In Python gibt es viele hervorragende und tiefe maschinelle Lernmethoden

Die Beziehung zwischen der Anzahl der Oracle-Instanzen und der Datenbankleistung Die Beziehung zwischen der Anzahl der Oracle-Instanzen und der Datenbankleistung Mar 08, 2024 am 09:27 AM

Die Beziehung zwischen der Anzahl der Oracle-Instanzen und der Datenbankleistung Oracle-Datenbank ist eines der bekanntesten relationalen Datenbankverwaltungssysteme in der Branche und wird häufig für die Datenspeicherung und -verwaltung auf Unternehmensebene verwendet. In Oracle-Datenbanken ist die Instanz ein sehr wichtiges Konzept. Instanz bezieht sich auf die laufende Umgebung der Oracle-Datenbank im Speicher. Jede Instanz verfügt über eine unabhängige Speicherstruktur und einen Hintergrundprozess, der zur Verarbeitung von Benutzeranforderungen und zur Verwaltung von Datenbankvorgängen verwendet wird. Die Anzahl der Instanzen hat einen wichtigen Einfluss auf die Leistung und Stabilität der Oracle-Datenbank.

See all articles