Heim Backend-Entwicklung PHP-Tutorial Analyse von Yii-Framework-Komponenten und Ereignisverhaltensmanagement

Analyse von Yii-Framework-Komponenten und Ereignisverhaltensmanagement

Jun 19, 2018 pm 02:19 PM
yii 组件管理

Dieser Artikel stellt hauptsächlich die Yii-Framework-Komponenten und das Ereignisverhaltensmanagement vor und bietet eine detaillierte Analyse der Prinzipien und Nutzungstechniken des Yii-Framework-Komponentenmanagements und des Verhaltensmanagements. Freunde in Not können darauf verweisen

Dieser Artikel Beschreibt die Beispiele der Yii Framework-Komponenten- und Ereignisverhaltensverwaltung. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Yii ist ein komponentenbasiertes Hochleistungs-PHP-Framework für die Entwicklung umfangreicher Webanwendungen. CComponent ist fast die Basisklasse aller Klassen. Ihre Methoden und Eigenschaften sind wie folgt: Die private Variable $_e speichert Ereignisse (manchmal auch Hook genannt) und das Array $_m speichert Verhaltensweisen (Verhalten).

Komponentenverwaltung

YII ist ein reines Oop-Framework in vielen Klassen, CComponent Die magischen Methoden __get() und __set() werden in PHP verwendet, um auf Eigenschaften zuzugreifen und diese festzulegen, aber die Funktionen dieser Methoden gehen weit darüber hinaus. Im Folgenden wird __get() verwendet, um

public function __get($name)
{
  $getter='get'.$name;
  if(method_exists($this,$getter))
    return $this->$getter();
  else if(strncasecmp($name,'on',2)===0 && method_exists($this,$name))
  {
    // duplicating getEventHandlers() here for performance
    $name=strtolower($name);
    if(!isset($this->_e[$name]))
      $this->_e[$name]=new CList;
    return $this->_e[$name];
  }
  else if(isset($this->_m[$name]))
    return $this->_m[$name];
  else if(is_array($this->_m))
  {
    foreach($this->_m as $object)
    {
      if($object->getEnabled() && (property_exists($object,$name) || $object->canGetProperty($name)))
        return $object->$name;
    }
  }
  throw new CException(Yii::t('yii','Property "{class}.{property}" is not defined.',
    array('{class}'=>get_class($this), '{property}'=>$name)));
}
Nach dem Login kopieren

Wenn CComponent oder seine Unterklassenobjektinstanz $obj->name verwendet wird, die __get($name)-Methode :

1. Bestimmen Sie zunächst, ob es eine getName()-Methode in der Instanz gibt. Wenn ja, handelt es sich um Ereignisse, die in CComponent-Unterklassen reserviert sind. Sie werden verwendet, um an Ereignissen festzuhalten Name), um festzustellen, ob der Name in einer Instanz der Klasse vorhanden ist. Andernfalls führen Sie Schritt 3 aus.

3 Wenn der Name im Verhaltensarray vorhanden ist, geben Sie das geänderte Verhalten zurück Wenn es nicht existiert, führen Sie Schritt 4 aus.

4. Durchlaufen Sie das Verhaltensarray. Das Verhalten im Array ist eine Instanz der CBehavior-Unterklasse, und CBehavior ist wieder eine Unterklasse von CComponent. Verwenden Sie daher eine rekursive Methode Um die Methode im Verhalten zu erhalten, führen Sie Schritt 5 aus.

5. Eine Ausnahme auslösen: Das angeforderte Attribut existiert nicht.

Die __get()-Methode kann in der CComponent-Unterklasse überladen werden. Beispielsweise wird die Entscheidung über den Erhalt der Komponente zu CModule hinzugefügt. Dies führt zu einem Problem. Es ist am besten, nicht denselben Namen für Attribute und Komponenten zu verwenden, da das Programm die Komponente zuerst lädt und die gewünschten Attribute möglicherweise nicht abgerufen werden. Wenn die Namen identisch sein müssen, müssen Getter identisch sein wird verwendet, um die Attribute zu erhalten.

public function __get($name)
{
  if($this->hasComponent($name))
    return $this->getComponent($name);
  else
    return parent::__get($name);
}
Nach dem Login kopieren

In Bezug auf das Laden und Erstellen von Komponenten wurden in der vorherigen YII-Framework-Analyse Anmerkungen 1: Im dritten Punkt des YII-Ausführungsprozesses gibt es eine Frage: Registrierung Der Kern des Frameworks Beeinträchtigt das gleichzeitige Laden so vieler Komponenten die Leistung? Eigentlich nein. Bei der Registrierung speichern Sie einfach die Komponente und ihre entsprechende Konfiguration in Form von Schlüssel-Wert-Paaren in einem Array (außer bei vorinstallierten). Bei Verwendung können Sie die Komponente wie oben über createComponent( in) erstellen Die YIIBase-Methode wird erstellt und initialisiert. Beim Aufrufen von __get() oder getComponent() über CModule oder seine Nachkommen (z. B. CWebApplication) zum Abrufen von Komponenten erstellt CModule einen Objektpool über das Array $_components, um sicherzustellen, dass jede Komponente nur einmal in einer Anforderung instanziiert wird.

Ereignisverhaltensverwaltung

Ereignisse entsprechen Erweiterungen oder Plug-Ins einer Komponente. Die in der Komponente reservierten Hooks werden verwendet, um interne Aufrufe nach außen zu implementieren die Komponente und teilweise Kontrolle der Komponente von außen. In der CComponent-Unterklasse können Sie Methoden, die mit on beginnen, als Ereignisse definieren, ähnlich wie onclick, onchange usw. in js. Tatsächlich sind die Prinzipien ähnlich. Alle Ereignisse sind Unterklassen von CEvent in derselben Datei wie CComponent.

/**
* Raised right BEFORE the application processes the request.
* @param CEvent $event the event parameter
*/
public function onBeginRequest($event)
{
  $this->raiseEvent('onBeginRequest',$event);
}
/**
* Runs the application.
* This method loads static application components. Derived classes usually overrides this
* method to do more application-specific tasks.
* Remember to call the parent implementation so that static application components are loaded.
*/
public function run()
{
  if($this->hasEventHandler('onBeginRequest'))
    $this->onBeginRequest(new CEvent($this));
  $this->processRequest();
  if($this->hasEventHandler('onEndRequest'))
    $this->onEndRequest(new CEvent($this));
}
Nach dem Login kopieren

Wenn Sie beispielsweise die run()-Methode in CApplication aufrufen, ermitteln Sie vor der Verarbeitung der Anforderung zunächst, ob das Handle des onBeginRequest-Ereignisses extern übergeben wird. Wenn dies der Fall ist, ruft die Methode onBeginRequest($event) die Methode raiseEvent() in CComponent auf, um die Funktion oder Methode im Handle auszuführen.

Behavior ist eine aktualisierte Version von Event, und alle Verhaltensweisen sind Unterklassen von CBehavior. Wenn wir Schritt 4 der obigen __get()-Methodenanalyse analysieren, können wir sehen, dass die Rolle des Verhaltens darin besteht, die Eigenschaften der Komponente vollständig zu erweitern, bei denen es sich um Eigenschaften, Methoden, Ereignisse und sogar Verhaltensweisen handeln kann, was die Programmentwicklung flexibler macht.

Eine weitere Funktion des Verhaltens besteht darin, ähnliche Ereignishandles zusammenzufügen. Wenn das Verhalten die Methode attachment() ausführt, wird es den Zweck der Aspektverwaltung und -erweiterung binden . CModelBehavior sammelt beispielsweise modellbezogene Ereignisse, um die Wiederverwendung seiner Unterklassen zu erleichtern. Wir können es erben, wenn wir dem Modell Verhaltensweisen hinzufügen müssen.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Über die Verwendung der Yii-Paging-Komponente


Über die Verwendung des Regelklassenvalidators in Yii-Daten Modell


Das obige ist der detaillierte Inhalt vonAnalyse von Yii-Framework-Komponenten und Ereignisverhaltensmanagement. 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)

So entwickeln Sie mit dem PHP-Framework Yii ein hochverfügbares Cloud-Backup-System So entwickeln Sie mit dem PHP-Framework Yii ein hochverfügbares Cloud-Backup-System Jun 27, 2023 am 09:04 AM

Mit der kontinuierlichen Weiterentwicklung der Cloud-Computing-Technologie ist die Datensicherung zu etwas geworden, das jedes Unternehmen durchführen muss. In diesem Zusammenhang ist es besonders wichtig, ein hochverfügbares Cloud-Backup-System zu entwickeln. Das PHP-Framework Yii ist ein leistungsstarkes Framework, das Entwicklern dabei helfen kann, schnell leistungsstarke Webanwendungen zu erstellen. Im Folgenden wird vorgestellt, wie Sie mit dem Yii-Framework ein hochverfügbares Cloud-Backup-System entwickeln. Entwerfen des Datenbankmodells Im Yii-Framework ist das Datenbankmodell ein sehr wichtiger Teil. Denn das Datensicherungssystem erfordert viele Tabellen und Beziehungen

Wie verwende ich das Yii3-Framework in PHP? Wie verwende ich das Yii3-Framework in PHP? May 31, 2023 pm 10:42 PM

Mit der Weiterentwicklung des Internets wird auch die Nachfrage nach der Entwicklung von Webanwendungen immer größer. Für Entwickler erfordert die Entwicklung von Anwendungen ein stabiles, effizientes und leistungsstarkes Framework, das die Entwicklungseffizienz verbessern kann. Yii ist ein führendes Hochleistungs-PHP-Framework, das umfangreiche Funktionen und gute Leistung bietet. Yii3 ist die nächste Generation des Yii-Frameworks, das die Leistung und Codequalität basierend auf Yii2 weiter optimiert. In diesem Artikel stellen wir vor, wie Sie das Yii3-Framework zum Entwickeln von PHP-Anwendungen verwenden.

Symfony vs Yii2: Welches Framework eignet sich besser für die Entwicklung umfangreicher Webanwendungen? Symfony vs Yii2: Welches Framework eignet sich besser für die Entwicklung umfangreicher Webanwendungen? Jun 19, 2023 am 10:57 AM

Da die Nachfrage nach Webanwendungen weiter wächst, haben Entwickler bei der Auswahl von Entwicklungsframeworks immer mehr Möglichkeiten. Symfony und Yii2 sind zwei beliebte PHP-Frameworks. Sie verfügen beide über leistungsstarke Funktionen und Leistung. Welches Framework ist jedoch besser geeignet, wenn es darum geht, umfangreiche Webanwendungen zu entwickeln? Als nächstes führen wir eine vergleichende Analyse von Symphony und Yii2 durch, um Ihnen zu helfen, eine bessere Wahl zu treffen. Grundlegende Übersicht Symphony ist ein Open-Source-Webanwendungs-Framework, das in PHP geschrieben ist und darauf aufbaut

Datenabfrage im Yii-Framework: Effizienter Zugriff auf Daten Datenabfrage im Yii-Framework: Effizienter Zugriff auf Daten Jun 21, 2023 am 11:22 AM

Das Yii-Framework ist ein Open-Source-PHP-Webanwendungsframework, das zahlreiche Tools und Komponenten zur Vereinfachung des Prozesses der Webanwendungsentwicklung bereitstellt, wobei die Datenabfrage eine der wichtigen Komponenten ist. Im Yii-Framework können wir eine SQL-ähnliche Syntax verwenden, um auf die Datenbank zuzugreifen und Daten effizient abzufragen und zu bearbeiten. Der Abfrage-Builder des Yii-Frameworks umfasst hauptsächlich die folgenden Typen: ActiveRecord-Abfrage, QueryBuilder-Abfrage, Befehlsabfrage und Original-SQL-Abfrage

Yii2 vs. Phalcon: Welches Framework eignet sich besser für die Entwicklung von Grafik-Rendering-Anwendungen? Yii2 vs. Phalcon: Welches Framework eignet sich besser für die Entwicklung von Grafik-Rendering-Anwendungen? Jun 19, 2023 am 08:09 AM

Im aktuellen Informationszeitalter sind Big Data, künstliche Intelligenz, Cloud Computing und andere Technologien in den Fokus großer Unternehmen gerückt. Unter diesen Technologien hat die Grafikkarten-Rendering-Technologie als leistungsstarke Grafikverarbeitungstechnologie immer mehr Aufmerksamkeit erhalten. Die Grafikkarten-Rendering-Technologie wird häufig in der Spieleentwicklung, bei Film- und Fernsehspezialeffekten, im technischen Modellbau und in anderen Bereichen eingesetzt. Für Entwickler ist die Wahl eines Frameworks, das zu ihren Projekten passt, eine sehr wichtige Entscheidung. Unter den aktuellen Sprachen ist PHP eine sehr dynamische Sprache. Einige hervorragende PHP-Frameworks wie Yii2, Ph

Yii2-Programmierhandbuch: So führen Sie den Cron-Dienst aus Yii2-Programmierhandbuch: So führen Sie den Cron-Dienst aus Sep 01, 2023 pm 11:21 PM

Wenn Sie fragen: „Was ist Yii?“ schauen Sie sich mein vorheriges Tutorial an: Einführung in das Yii Framework, das die Vorteile von Yii bespricht und die Neuerungen in Yii 2.0 beschreibt, das im Oktober 2014 veröffentlicht wurde. Hmm> In dieser Serie „Programmieren mit Yii2“ werde ich die Leser in die Verwendung des Yii2PHP-Frameworks einführen. Im heutigen Tutorial werde ich Ihnen zeigen, wie Sie die Konsolenfunktionalität von Yii nutzen können, um Cron-Jobs auszuführen. In der Vergangenheit habe ich wget – eine über das Internet zugängliche URL – in einem Cron-Job verwendet, um meine Hintergrundaufgaben auszuführen. Dies wirft Sicherheitsbedenken auf und hat einige Leistungsprobleme zur Folge. Während ich in unserer Serie „Sicherheit für Startup“ einige Möglichkeiten zur Risikominimierung besprochen habe, hatte ich gehofft, auf konsolengesteuerte Befehle umsteigen zu können

Yii2 vs Symfony: Welches Framework ist besser für die API-Entwicklung? Yii2 vs Symfony: Welches Framework ist besser für die API-Entwicklung? Jun 18, 2023 pm 11:00 PM

Mit der rasanten Entwicklung des Internets sind APIs zu einer wichtigen Möglichkeit geworden, Daten zwischen verschiedenen Anwendungen auszutauschen. Daher wird es immer wichtiger, ein API-Framework zu entwickeln, das einfach zu warten, effizient und stabil ist. Bei der Auswahl eines API-Frameworks sind Yii2 und Symfony zwei beliebte Optionen unter Entwicklern. Welches ist also besser für die API-Entwicklung geeignet? In diesem Artikel werden diese beiden Frameworks verglichen und einige Schlussfolgerungen gezogen. 1. Grundlegende Einführung Yii2 und Symfony sind ausgereifte PHP-Frameworks mit entsprechenden Erweiterungen, die zur Entwicklung verwendet werden können

So konvertieren Sie Yii-Objekte in Arrays oder geben sie direkt im JSON-Format aus So konvertieren Sie Yii-Objekte in Arrays oder geben sie direkt im JSON-Format aus Jan 08, 2021 am 10:13 AM

Yii-Framework: In diesem Artikel wird die Methode von Yii zum Konvertieren von Objekten in Arrays oder zur direkten Ausgabe in das JSON-Format vorgestellt. Sie hat einen bestimmten Referenzwert und ich hoffe, dass sie jedem helfen kann.

See all articles