Als ich zum ersten Mal mit PHP in Berührung kam, nutzte ich einen prozessorientierten Ansatz, um zum Spaß einige sehr einfache Websites zu erstellen, und schrieb einfach PHP Code-Stapelung, Skalierbarkeit und Wartbarkeit sind so schlecht, dass es äußerst umständlich ist, die Logik zu ändern. Später entdeckte ich, dass PHP objektorientiert ist, und plötzlich hatte ich das Gefühl, dass ich damals noch sehr jung und unwissend war. Schließlich ist PHP in C implementiert, was nicht überraschend ist.
Vorwort:
Von unserem Kontakt PHPDas erste, was uns begegnet, sind Funktionen: Array-Operationsfunktionen, String-Operationsfunktionen, Dateioperationsfunktionen usw. Diese Funktionen sind die Grundlage für unseren Einsatz von PHP und stellen auch die prozessorientierte Programmierung dar, die PHP seit seiner Geburt unterstützt. Prozessorientiert kapselt Funktionen einzeln und löst Probleme mit einer modularen Idee.
Objektorientierte Programmierung wird ab PHP4 unterstützt. Allerdings ist die objektorientierte Unterstützung von PHP4 nicht perfekt. Ab PHP5 hat PHP ein neues Objektmodell (Objektmodell) eingeführt und viele neue Funktionen hinzugefügt, darunter Zugriffskontrolle, abstrakte und endgültige Klassen, Klassenmethoden, magische Methoden, Schnittstellen, Objektklonen und Typhinweise usw. Und in der kürzlich veröffentlichten PHP5.3-Version gibt es Namespaces, verzögerte statische Bindung und zusätzliche Es gibt zwei magische Methoden __callStatic() und __aufrufen().
Wie wird es also unten in PHP implementiert und wie ist seine Struktur?
Eins. Klassenstruktur
Ein Beispiel für das Zitieren von TIPI:
class ParentClass { } interface Ifce { public function iMethod(); } final class Tipi extends ParentClass implements Ifce { public static $sa = 'aaa'; const CA = 'bbb'; public function __constrct() { } public function iMethod() { } private function _access() { } public static function access() { } }
Eine übergeordnete Klasse ParentClass, eine Schnittstelle Ifce und eine Unterklasse Tipi werden hier definiert. Die Unterklasse erbt die übergeordnete Klasse ParentClass, implementiert die Schnittstelle Ifce und verfügt über eine statische Variable $sa, eine Klassenkonstante CA, eine öffentliche Methode, eine private Methode und eine öffentliche statische Methode. Wie werden diese Strukturen innerhalb der Zend-Engine implementiert? Wie werden Klassenmethoden und Mitgliedsvariablen gespeichert? Zugriffskontrolle, wie werden statische Mitglieder markiert?
Schauen wir uns zunächst die interne Speicherstruktur der Klasse an:
Anhand einiger Felder der obigen Struktur analysieren wir die Leistung des PHP-Codes am Anfang des Artikels im Kernel. Wie unten gezeigt :
Feldname | Feldbeschreibung | ParentClass-Klasse | Ifce-Schnittstelle | Tipi-Klasse |
Name | Klassenname | ParentClass | Ifce | Tipi |
Typ | Kategorie | 2 (benutzerdefiniert) | 2 (benutzerdefiniert) | 2 (benutzerdefiniert, 1 ist das vom System erstellte) in der Klasse) |
Elternklasse | Elternklasse | Leer | Leer | Elternklasse |
refcount | Referenzanzahl | 1 | 1 | 2 |
ce_flags | Klassentyp | 0 | 144 | 524352 |
function_table | Funktionsliste | Leer | Funktionsname=iMethod |. type=258 | Funktionsname=__construct | 2 |. fn_flags=65800 function_name=_access |function_name=access |. type=2 |. fn_flags=257 |
Schnittstellen | Schnittstellenliste | null | Ifce-Schnittstellenschnittstellennummer ist 1 | |
Speicherdateiadresse | /tipi.php | /tipi.php | /ipi.php | |
Anzahl der Klassenstartlinien | 15 | 18 | 22 | |
Anzahl der Klassenendzeilen | 16 | 20 | 38 |