Wir alle kennen den Ausführungsprozess von PHP-Skripten. Zuerst kompiliert die Zend-Engine den PHP-Quellcode in eine Opcode-Sequenz, und dann interpretiert die Zend-VM ihn. Der allgemeine Kompilierungsprozess besteht darin, zuerst eine lexikalische Analyse und eine Syntaxanalyse durchzuführen und dann zu kompilieren. Nach der Syntaxanalyse gibt es das Konzept des abstrakten Syntaxbaums (Abstract Syntax Tree oder AST), bei dem es sich um die Ausgabe der Syntaxanalyse handelt. Der anschließende Kompilierungsprozess wird vom Compiler basierend auf AST durchgeführt.
Aber PHP ist etwas Besonderes. Die Zend-Engine generiert Opcode direkt nach der Syntaxanalyse, ohne AST zu generieren. Der größte Vorteil dieser Vorgehensweise besteht darin, dass der Kompilierungsprozess beschleunigt wird. Der Nachteil besteht jedoch darin, dass dadurch einige Freiheiten verloren gehen, die Optimierung erschwert wird und die Compilerlogik komplex wird. Insbesondere gibt es auf der offiziellen PHP-Website ein Wiki, in dem die Einführung von AST in den Kompilierungsprozess von PHP erläutert wird. Natürlich ist die Implementierung sehr schwierig.
Wir kommen normalerweise nicht mit dem Kompilierungsprozess von PHP in Berührung, aber AST ist eine nützliche Sache in unserer täglichen Arbeit B. PHP_CodeSniffer, PHP_Depend, ZendStudio, PDT, wo der Quellcode analysiert werden muss, ist mehr oder weniger die Hilfe von AST erforderlich.
Werfen wir einen Blick auf den PHP7- und PHP5-Kompilierungsprozess, wie in der Abbildung gezeigt
Das Obige stellt den PHP-Parsing-Prozess einschließlich verschiedener Aspekte vor. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.