suchen
HeimBackend-EntwicklungPHP-TutorialPHP-Kern-detaillierte Erklärung von Klassen und objektorientiertem Code

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 :

Dateinameline_startline_end


二。变量与成员变量

PHP内核的存储机制(分离/改变)所介绍,

变量要么是定义在全局范围中,叫做全局变量,要么是定义在某个函数中, 叫做局部变量。

成员变量是定义在类里面,并和成员方法处于同一层次。如下一个简单的PHP代码示例,定义了一个类, 并且这个类有一个成员变量。

class Tipi { 
	public $var;
}

1.成员变量的访问:

访问这个成员变量当然是通过对象来访问。

2.成员变量的规则:

1.接口中不允许使用成员变量

2.成员变量不能拥有抽象属性

3.不能声明成员变量为final

4.不能重复声明属性

在声明类的时候初始化了类的成员变量所在的HashTable,之后如果有新的成员变量声明时,在编译时zend_do_declare_property。函数首先检查成员变量不允许的这4 条情况。

比如:.

class Tipi { 
	public final $var;
}

运行程序将报错,违反了第三条:Fatal error: Cannot declare property Tipi::$var final, the final modifier is allowed only for methods and classes in .. 这个错误由zend_do_declare_property函数抛出


三。函数与成员方法

成员方法从本质上来讲也是一种函数,所以其存储结构也和常规函数一样,存储在zend_function结构体中。



对于一个类的多个成员方法,它是以HashTable的数据结构存储了多个zend_function结构体。 和前面的成员变量一样,在类声明时成员方法也通过调用zend_initialize_class_data方法,初始化了整个方法列表所在的HashTable。 在类中我们如果要定义一个成员方法,格式如下:

class Tipi{ 
     public function t() {echo 1; }
}


除去访问控制关键字,一个成员方法和常规函数是一样的,从语法解析中调用的函数一样(都是zend_do_begin_function_declaration函数), 但是其调用的参数有一些不同,第三个参数is_method,成员方法的赋值为1,表示它作为成员方法的属性。 在这个函数中会有一系统的编译判断,比如在接口中不能声明私有的成员方法。 看这样一段代码:

interface Ifce { 
    private function method();
}


Bei direkter Ausführung meldet das Programm einen Fehler: Schwerwiegender Fehler: Zugriffstyp für Schnittstellenmethode Ifce::method() muss in weggelassen werden. Dieser Code entspricht dem Code in der zend_do_begin_function_declaration Funktion.

Vier. Ähnlichkeiten und Unterschiede zwischen Methoden (Funktion) und Funktionen (Methode)


Die Implementierung von Funktionen wurde bereits früher vorgestellt Methoden sind ähnlich: Eine Reihe von Logiken werden zur Ausführung in eine Sammlung eingefügt, es gibt jedoch viele Unterschiede in der Verwendung der beiden. Hier diskutieren wir die Implementierung der beiden. Aus Sicht der Implementierung wird der interne Code beider letztendlich als op_array interpretiert, und es gibt keinen Unterschied in seiner Ausführung (es sei denn, objektspezifische Änderungen oder Methoden wie $this/self werden verwendet) und den Unterschied zwischen den beiden spiegelt sich in den beiden Aspekten wider:


1. Es ist die Umsetzung der Definition (Registrierung); 🎜>

2. Es ist die Umsetzung des Aufrufs

Implementierung der Definitionsmethode (Registrierung) Funktionen und Methoden werden während der Kompilierungsphase in der Variablen „compiler_globals“ registriert und von beiden verwendet Die gleichen Kernel-Verarbeitungsfunktionen zend_do_begin_function_declaration() und zend_do_end_function_declaration() vervollständigen diesen Prozess. Der interne Inhalt der beiden wird schließlich als op_codes-Array interpretiert und gespeichert, aber der „gemountete“ Speicherort nach der Kompilierung ist unterschiedlich, wie unten gezeigt:


Registrierungsort von Funktionen und Methoden in PHP


Implementierung des Aufrufs Methode


Der Unterschied im Definitionsort und in der Natur bestimmt, dass Methoden fortgeschrittener sind als Funktionen Überprüfungsarbeit, Methodenaufrufe haben einen weiteren OPCODE namens ZEND_INIT_METHOD_CALL , Die Funktion besteht darin, die Methode bei „execute_data.fbc“ zu registrieren, und dann können Sie dieselbe Verarbeitungsfunktion

ZEND_DO_FCALL_BY_NAME für die Verarbeitung verwenden.

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

Das obige ist der detaillierte Inhalt vonPHP-Kern-detaillierte Erklärung von Klassen und objektorientiertem Code. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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: Eine Einführung in die serverseitige SkriptsprachePHP: Eine Einführung in die serverseitige SkriptspracheApr 16, 2025 am 12:18 AM

PHP ist eine serverseitige Skriptsprache, die für dynamische Webentwicklung und serverseitige Anwendungen verwendet wird. 1.PHP ist eine interpretierte Sprache, die keine Zusammenstellung erfordert und für die schnelle Entwicklung geeignet ist. 2. PHP -Code ist in HTML eingebettet, wodurch es einfach ist, Webseiten zu entwickeln. 3. PHP verarbeitet die serverseitige Logik, generiert die HTML-Ausgabe und unterstützt Benutzerinteraktion und Datenverarbeitung. 4. PHP kann mit der Datenbank interagieren, die Einreichung von Prozessformularen und serverseitige Aufgaben ausführen.

PHP und das Web: Erforschen der langfristigen AuswirkungenPHP und das Web: Erforschen der langfristigen AuswirkungenApr 16, 2025 am 12:17 AM

PHP hat das Netzwerk in den letzten Jahrzehnten geprägt und wird weiterhin eine wichtige Rolle bei der Webentwicklung spielen. 1) PHP stammt aus dem Jahr 1994 und ist aufgrund seiner Benutzerfreundlichkeit und der nahtlosen Integration in MySQL die erste Wahl für Entwickler. 2) Zu den Kernfunktionen gehört das Generieren dynamischer Inhalte und die Integration in die Datenbank, sodass die Website in Echtzeit aktualisiert und auf personalisierte Weise angezeigt wird. 3) Die breite Anwendung und das Ökosystem von PHP hat seine langfristigen Auswirkungen angetrieben, steht jedoch auch mit Versionsaktualisierungen und Sicherheitsherausforderungen gegenüber. 4) Leistungsverbesserungen in den letzten Jahren, wie die Veröffentlichung von PHP7, ermöglichen es ihm, mit modernen Sprachen zu konkurrieren. 5) In Zukunft muss PHP sich mit neuen Herausforderungen wie Containerisierung und Microservices befassen, aber seine Flexibilität und die aktive Community machen es anpassungsfähig.

Warum PHP verwenden? Vorteile und Vorteile erläutertWarum PHP verwenden? Vorteile und Vorteile erläutertApr 16, 2025 am 12:16 AM

Zu den Kernvorteilen von PHP gehören einfacher Lernen, starke Unterstützung für Webentwicklung, reiche Bibliotheken und Rahmenbedingungen, hohe Leistung und Skalierbarkeit, plattformübergreifende Kompatibilität und Kosteneffizienz. 1) leicht zu erlernen und zu bedienen, geeignet für Anfänger; 2) gute Integration in Webserver und unterstützt mehrere Datenbanken. 3) leistungsstarke Frameworks wie Laravel; 4) hohe Leistung kann durch Optimierung erzielt werden; 5) mehrere Betriebssysteme unterstützen; 6) Open Source, um die Entwicklungskosten zu senken.

Debunking der Mythen: Ist PHP wirklich eine tote Sprache?Debunking der Mythen: Ist PHP wirklich eine tote Sprache?Apr 16, 2025 am 12:15 AM

PHP ist nicht tot. 1) Die PHP -Community löst aktiv Leistungs- und Sicherheitsprobleme, und Php7.x verbessert die Leistung. 2) PHP ist für die moderne Webentwicklung geeignet und wird in großen Websites häufig verwendet. 3) PHP ist leicht zu erlernen und der Server funktioniert gut, aber das Typsystem ist nicht so streng wie statische Sprachen. 4) PHP ist in den Bereichen Content-Management und E-Commerce immer noch wichtig, und das Ökosystem entwickelt sich weiter. 5) Optimieren Sie die Leistung über Opcache und APC und verwenden Sie OOP- und Designmuster, um die Codequalität zu verbessern.

Die PHP vs. Python -Debatte: Was ist besser?Die PHP vs. Python -Debatte: Was ist besser?Apr 16, 2025 am 12:03 AM

PHP und Python haben ihre eigenen Vor- und Nachteile, und die Wahl hängt von den Projektanforderungen ab. 1) PHP eignet sich für Webentwicklung, leicht zu lernen, reichhaltige Community -Ressourcen, aber die Syntax ist nicht modern genug, und Leistung und Sicherheit müssen beachtet werden. 2) Python eignet sich für Datenwissenschaft und maschinelles Lernen mit prägnanter Syntax und leicht zu erlernen. Es gibt jedoch Engpässe bei der Ausführungsgeschwindigkeit und des Speichermanagements.

Zweck von PHP: Erstellen dynamischer WebsitesZweck von PHP: Erstellen dynamischer WebsitesApr 15, 2025 am 12:18 AM

PHP wird verwendet, um dynamische Websites zu erstellen. Zu den Kernfunktionen gehören: 1. Dynamische Inhalte generieren und Webseiten in Echtzeit generieren, indem Sie eine Verbindung mit der Datenbank herstellen; 2. Verarbeiten Sie Benutzerinteraktions- und Formulareinreichungen, überprüfen Sie Eingaben und reagieren Sie auf Operationen. 3. Verwalten Sie Sitzungen und Benutzerauthentifizierung, um eine personalisierte Erfahrung zu bieten. 4. Optimieren Sie die Leistung und befolgen Sie die Best Practices, um die Effizienz und Sicherheit der Website zu verbessern.

PHP: Datenbanken und serverseitige Logik bearbeitenPHP: Datenbanken und serverseitige Logik bearbeitenApr 15, 2025 am 12:15 AM

PHP verwendet MySQLI- und PDO-Erweiterungen, um in Datenbankvorgängen und serverseitiger Logikverarbeitung zu interagieren und die serverseitige Logik durch Funktionen wie Sitzungsverwaltung zu verarbeiten. 1) Verwenden Sie MySQLI oder PDO, um eine Verbindung zur Datenbank herzustellen und SQL -Abfragen auszuführen. 2) Behandeln Sie HTTP -Anforderungen und Benutzerstatus über Sitzungsverwaltung und andere Funktionen. 3) Verwenden Sie Transaktionen, um die Atomizität von Datenbankvorgängen sicherzustellen. 4) Verhindern Sie die SQL -Injektion, verwenden Sie Ausnahmebehandlung und Schließen von Verbindungen zum Debuggen. 5) Optimieren Sie die Leistung durch Indexierung und Cache, schreiben Sie hochlesbarer Code und führen Sie die Fehlerbehandlung durch.

Wie verhindern Sie die SQL -Injektion in PHP? (Vorbereitete Aussagen, PDO)Wie verhindern Sie die SQL -Injektion in PHP? (Vorbereitete Aussagen, PDO)Apr 15, 2025 am 12:15 AM

Die Verwendung von Vorverarbeitungsanweisungen und PDO in PHP kann SQL -Injektionsangriffe effektiv verhindern. 1) Verwenden Sie PDO, um eine Verbindung zur Datenbank herzustellen und den Fehlermodus festzulegen. 2) Erstellen Sie Vorverarbeitungsanweisungen über die Vorbereitungsmethode und übergeben Sie Daten mit Platzhaltern und führen Sie Methoden aus. 3) Abfrageergebnisse verarbeiten und die Sicherheit und Leistung des Codes sicherstellen.

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)
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung