Heim  >  Artikel  >  php教程  >  Yii-Framework-Analyse (5) – Lassen Sie uns noch einmal über die CComponent-Basisklasse sprechen

Yii-Framework-Analyse (5) – Lassen Sie uns noch einmal über die CComponent-Basisklasse sprechen

黄舟
黄舟Original
2016-12-27 11:19:001115Durchsuche

Dieser Artikel kann als Ergänzung zu „Yii Framework Analysis (2) – CComponent Class Analysis“ verwendet werden.

Die CComponent-Klasse bildet die Grundlage für die komponentenbasierte und ereignisgesteuerte Programmierung des YII-Frameworks. Die meisten Klassen im YII-Framework verwenden die CComponent-Klasse als Basisklasse. Die CComponent-Klasse bietet 3 Funktionen für ihre Unterklassen:

1. Mitgliedsvariablenerweiterung
Definieren Sie eine Mitgliedsvariable, indem Sie zwei Mitgliedsfunktionen (getXXX/setXXX) definieren, wie zum Beispiel:
öffentliche Funktion getText() {…}
öffentliche Funktion setText {…}
Dies entspricht der Definition einer $text-Mitgliedsvariablen, die wie folgt aufgerufen werden kann

$a=new CComponent;
$a=$component->text; // 等价于$a=$component->getText();
$component->text='abc'; // 等价于$component->setText('abc');

CComponent erfolgt über die magische Methode __get und __set werden verwendet, um die Funktion „Mitgliedsvariablenerweiterung“ zu implementieren. Wenn eine Mitgliedsvariable bedient wird, die in der Klasse selbst nicht vorhanden ist, ruft PHP die Methoden __get und __set dieser Klasse zur Verarbeitung auf. CComponent verwendet diese beiden magischen Methoden, um die Funktion „Mitgliedsvariablenerweiterung“ zu implementieren. Die folgende Abbildung beschreibt eine Unterklasse von CComponent, die zwei Mitgliedsvariablen hinzufügt: active und sessionName. Die Abbildung beschreibt den Aufrufprozess dieser beiden Mitgliedsvariablen.

Yii-Framework-Analyse (5) – Lassen Sie uns noch einmal über die CComponent-Basisklasse sprechen

(Hinweis: Informationen zur Verwendung der magischen Methoden __get und __set finden Sie unter: PHP Basic Classes and Objects 13 - Overloading)

Bei der objektorientierten Programmierung reicht es aus, eine Mitgliedsvariable direkt zu definieren. Warum implementiert CComponent eine Mitgliedsvariable durch die Definition von zwei Funktionen? Einer der Hauptgründe ist die Notwendigkeit, das Laden von Mitgliedsvariablen zu verzögern. Im Allgemeinen werden die Mitgliedsvariablen einer Klasse im Konstruktor oder in der Initialisierungsfunktion einheitlich zugewiesen, aber nicht jede Mitgliedsvariable wird während der Verarbeitung einer Webanforderung zugewiesen Beispielsweise definiert die App-Klasse zwei Mitgliedsvariablen: $cache und $db ($cache ist ein Cache-Objekt, $db ist ein Datenbank-Link-Objekt, aber ein Web-For). Auf einigen Seiten der Website kann der Inhalt über den Cache abgerufen werden, sodass das Datenbankverknüpfungsobjekt nicht tatsächlich erstellt werden muss. Wenn App als Unterklasse von CComponent definiert ist, werden in der App-Klasse zwei Methoden definiert: getCache/getDb, sodass die getDb-Funktion aufgerufen wird, um die Datenbankverknüpfung zu initialisieren, wenn die DB-Mitgliedsvariable zum ersten Mal verwendet wird - d. h. bei der ersten Verwendung initialisieren. Obwohl durch verzögertes Laden ein Funktionsaufruf hinzugefügt wird, kann es die unnötige Initialisierung von Mitgliedsvariablen reduzieren (was im Allgemeinen die Zugriffsgeschwindigkeit der Website verbessert) und die Wartung und Erweiterung unseres Codes erleichtern.
Verzögertes Laden sollte die wichtigste Verwendung der Funktion „Mitgliedsvariablenerweiterung“ sein. Natürlich hat diese Funktion auch andere Verwendungszwecke. Wenn Sie eine Mitgliedsvariable bedienen, rufen Sie tatsächlich getXXX- und setXXX-Mitglieder auf Funktion, Sie rufen ein Stück Code auf!

2. Ereignismodell
Das Ereignismodell ist das „Beobachtermuster“ im Entwurfsmuster: Wenn sich der Zustand eines Objekts ändert, kann dieses Objekt andere Objekte über das Ereignis informieren.
Um das Ereignismodell zu verwenden, müssen Sie diese drei Schritte implementieren: 1. Definieren Sie das Ereignis. 2. Registrieren Sie den Ereignishandler. 3. Lösen Sie das Ereignis aus.
CComponent-Unterklassen definieren ein Ereignis, indem sie eine Mitgliedsfunktion definieren, die mit on beginnt, z. B.: öffentliche Funktion onClick(){…}, und dann den Ereignishandler registrieren, indem sie die Mitgliedsfunktion attachmentEventHandler aufrufen (mehrere Ereignishandler können registriert werden). und schließlich das Ereignis durch den Aufruf von raiseEvent auslösen.
Die CComponent-Klasse verwendet eine private Mitgliedsvariable, um das Ereignis und alle Handles für die Verarbeitung des Ereignisses zu speichern. Diese Mitgliedsvariable kann als Hash-Tabelle betrachtet werden. Der Schlüssel der Hash-Tabelle ist der Name des Ereignisses und der Wert Die Hash-Tabelle ist die verknüpfte Liste der Ereignisverarbeitungsfunktion.

Yii-Framework-Analyse (5) – Lassen Sie uns noch einmal über die CComponent-Basisklasse sprechen

3. Verhaltensklassenbindung
Es gibt zwei Möglichkeiten, Funktionen zu einer Klasse hinzuzufügen: 1. Den Code dieser Klasse direkt ändern und einige Mitgliedsfunktionen und Mitgliedsvariablen hinzufügen. 2. Ableitung und Erweiterung durch Unterklassen. Offensichtlich ist die zweite Methode einfacher zu warten und zu erweitern. Wenn einer Klasse mehrere Funktionen hinzugefügt werden müssen (mehrere Personen zu unterschiedlichen Zeiten), ist eine mehrstufige Ableitung erforderlich, was offensichtlich die Wartungskosten erhöht.
CComponent verwendet eine besondere Methode zur Erweiterung von Klasseninformationen – die Verhaltensklassenbindung. Die Verhaltensklasse ist eine Unterklasse von CBehavior. Sie kann sich selbst eine oder mehrere Mitgliedsfunktionen und Mitgliedsvariablen der CBehavior-Klasse hinzufügen und einige CBehavior-Klassen deinstallieren, wenn sie nicht benötigt werden. Hier ist ein einfaches Beispiel:
//Calculator class
class Calculator erweitert CBehavior
{
public function add($x, $y) { return $x + $y; }
public function sub($x, $y) { return $x - $y; }
...
}
$comp = new CComponent();
//für meine Klasse Taschenrechnerfunktion hinzufügen
$comp->attachbehavior('calculator', new Calculator());
$comp->add(2, 5);
$comp->sub(2 , 5);
CComponent implementiert die „Verhaltensklassenbindung“ durch drei magische Methoden: __get, __set und __call (Einzelheiten zur Verwendung dieser drei magischen Methoden finden Sie unter: PHP-Grundklassen und -Objekte 13 – Überladen). „Definierte“ Funktion beim Aufruf Mitgliedsvariablen und Mitgliedsmethoden, die in der CComponent-Klasse nicht vorhanden sind, verwendet die CComponent-Klasse diese drei magischen Methoden, um nach dem „dynamisch gebundenen Verhaltensobjekt“ zu suchen. Das heißt, nicht vorhandene Mitgliedsvariablen und Mitgliedsmethoden werden an das „dynamische Bindungsobjekt“ weitergeleitet.


Yii-Framework-Analyse (5) – Lassen Sie uns noch einmal über die CComponent-Basisklasse sprechen

Die Eigenschaften der CComponent-Klasse können in 3 Sätzen zusammengefasst werden:
1. Konfigurieren Sie beim Zugriff besser ein Objekt Die Mitgliedsvariablen eines Objekts führen tatsächlich einen Code aus.
2. Bessere Überwachung eines Objekts kann einem Objekt Mitgliedsvariablen und Mitgliedsfunktionen hinzufügen und auch den Status des Objekts überwachen.

Das Obige ist die Yii-Framework-Analyse (5) – sprechen wir über den Inhalt der CComponent-Basisklasse. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).



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