Als Skriptsprache, die in der Webentwicklung weit verbreitet ist, hat PHP dank der optimierten Speicherverwaltung, des Fehlerbehandlungsmechanismus und der JIT -Kompilierungstechnologie erhebliche Leistungsverbesserungen in der PHP7 -Version erzielt. Das Verständnis des zugrunde liegenden Betriebsmechanismus von PHP7 ist eine wichtige Grundlage für die Entwicklung leistungsstarker PHP-Anwendungen. Dieser Artikel startet von der Quellcodeebene und analysiert seinen Kernprozess von der Kompilierung bis zur Ausführung.
Der Kompilierungsprozess von PHP ist hauptsächlich in drei Stufen unterteilt: lexikalische Analyse, grammatikalische Analyse und Zwischencodeerzeugung. Das Folgende wird nacheinander zerlegt.
Während der lexikalischen Analysephase wird der PHP -Quellcode in die kleinsten Spracheinheiten unterteilt, die als "Token" bezeichnet werden, wie Variablen, Zahlen, Zeichenfolgen und Operatoren. Jedes Tag enthält einen Typnamen und einen entsprechenden Wert.
$var1 = 10;
$var2 = "hello world";
Die entsprechenden Markierungen sind:
T_VARIABLE $var1
T_WHITESPACE
T_EQUAL =
T_WHITESPACE
T_LNUMBER 10
T_SEMICOLON ;
T_WHITESPACE
T_VARIABLE $var2
T_WHITESPACE
T_EQUAL =
T_WHITESPACE
T_STRING "hello world"
T_SEMICOLON ;
Die Syntaxanalyse konstruiert eine Sequenz von Tags in einen Syntaxbaum, dessen Knoten eine Syntaxstruktur darstellen, z. B. eine bedingte Anweisung oder einen Funktionsaufruf. Der Syntaxbaum hilft dem Interpreter, die Codelogik zu verstehen.
if ($a > $b) {
$max = $a;
} else {
$max = $b;
}
Die entsprechende Syntaxbaumstruktur lautet:
if
├─ >
│ ├─ $a
│ └─ $b
├─ =
│ ├─ $max
│ └─ $a
└─ =
├─ $max
└─ $b
Zu diesem Zeitpunkt wird der Syntaxbaum von der virtuellen Maschine in einen abstrakten Zwischencode umgewandelt. Diese mittlere Sprache beruht nicht auf bestimmte Plattformen und hilft plattformübergreifende Ausführung und Leistungsoptimierung.
function get_user_name($userid) {
$users = array(
1 => "John",
2 => "Mary",
3 => "Bob"
);
if (isset($users[$userid])) {
return $users[$userid];
} else {
return "Unknown";
}
}
Der generierte Zwischencode lautet wie folgt:
FUNCTION get_user_name
PARAM $userid
ADD_ARRAY $users,1,"John",2,"Mary",3,"Bob"
IF isset,$users,$userid
GET_ARRAY $users,$userid
RETURN
ELSE
STRING "Unknown"
RETURN
ENDIF
END_FUNCTION
Nachdem PHP die Intermediate -Code -Erzeugung abgeschlossen hat, wird die Ausführungsstufe eingegeben und die virtuelle Maschine vervollständigt den Codevorgang.
Die Ausführung von PHP beruht auf seinem Dolmetscher, bestehend aus Sprachkernen und erweiterbaren Modulen. Der Kernteil ist für die grundlegende Syntax und die Prozesssteuerung verantwortlich, und das Erweiterungsmodul kann entsprechend den funktionalen Anforderungen frei geladen werden.
Die JIT-Kompilierungstechnologie, die eingeführt wurde, da PHP7 Hot Code-Pfade dynamisch in den lokalen Maschinencode zusammenstellen können, um die betriebliche Effizienz zu verbessern, insbesondere in wiederholten Betriebsintensivszenarien.
Die virtuelle PHP -Maschine ist für die Ausführung von Zwischencode und die Ausführung der zugrunde liegenden Aufgaben wie Speicherzuweisung, Funktionsaufrufe und Ausnahmebehandlung verantwortlich. Das Design bezieht sich auf die tatsächliche Hardware-Architektur und realisiert plattformübergreifende Ausführungsfunktionen.
PHP7 hat viele Optimierungen für die zugrunde liegende Architektur durchgeführt, und ihre Zusammenstellungs- und Ausführungsmechanismen sind in mehrere Links unterteilt: Lexikal- und Syntaxanalyse, Intermediate -Codegenerierung, virtuelle Maschinenausführung und JIT -Zusammenstellung. Für Entwickler hilft das Verständnis dieser Mechanismen nicht nur dabei, die Anwendungsleistung zu debuggen und zu optimieren, sondern ermöglicht es ihnen auch, ein tieferes Verständnis der Essenz der PHP -Sprache zu erlangen.