Beim Lesen des PHP-Quellcodes werden Sie auf viele Makros stoßen. Wenn Sie die Bedeutung dieser Makros nicht verstehen, führt dies zu großen Problemen beim Verständnis des Codes. Schauen wir uns nun die Bedeutung der beiden Makros CG und EG an.
CG
Bedeutung
CG bedeutet „compiler_globals“. Globale Variablen im Zusammenhang mit dem Zend-Compiler.
Funktion
Jeder weiß, dass PHP-Code schließlich zur Ausführung in Opcode umgewandelt wird. Bei der Konvertierung von PHP zu Opcode müssen einige Informationen gespeichert werden. Diese Informationen werden in globalen CG-Variablen gespeichert.
Wenn Sie wissen möchten, wie Zend PHP-Code in Opcode konvertiert und globale GC-Variablen verwendet, um diese Informationen zu speichern, können Sie sich die Methode „compile_file(zend_file_handle *file_handle, int type)“ der Datei Zend/zend_lingual_scanner.c ansehen
Code
Der relevante Code für dieses Makro befindet sich in der Datei Zend/zend_globals_macros.h. Wie folgt:
/* Compiler */ #ifdef ZTS <h1>define CG(v) ZEND_TSRMG(compiler_globals_id, zend_compiler_globals *, v)</h1> #else <h1>define CG(v) (compiler_globals.v)</h1> extern ZEND_API struct _zend_compiler_globals compiler_globals; #endif
EG
Bedeutung
EG bedeutet executor_globals. Globale Variablen im Zusammenhang mit dem Zend-Executor.
Funktion
Wenn die Zend-Engine Opcode ausführt, muss sie während der Ausführung einen Status aufzeichnen. Zum Beispiel der Umfang der aktuell ausgeführten Klasse, welche Dateien gerade geladen werden usw.
Code
Der relevante Code für dieses Makro befindet sich in der Datei Zend/zend_globals_macros.h. Wie folgt:
/* Executor */ #ifdef ZTS <h1>define EG(v) ZEND_TSRMG(executor_globals_id, zend_executor_globals *, v)</h1> #else <h1>define EG(v) (executor_globals.v)</h1> extern ZEND_API zend_executor_globals executor_globals;
Andere
EG und CG teilen einige Daten. Zum Beispiel function_table (Informationen zur Speichermethode), class_table (Informationen zur Speicherklasse).
Der relevante Code wurde in der init_executor-Methode von Zend/zend_execute_API.c wie folgt gefunden:
void init_executor(void) /* {{{ */ { zend_init_fpu(); ...... EG(function_table) = CG(function_table); EG(class_table) = CG(class_table); ...... }
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der CG- und EG-Makros im PHP7-Quellcode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!