PHP のソースコードを読んでいると、CG()、EG() などのマクロがたくさん出てきます。これらのマクロの意味を理解していないと、ソースコードを理解するのが非常に困難になります。
Zend エンジンには 2 つの重要なグローバル変数構造があり、これらは Zend エンジンが終了する前に存在する変数です。
typedef struct _zend_compiler_globals zend_compiler_globals;typedef struct _zend_executor_globals zend_executor_globals;
/* Compiler */#ifdef ZTS# define CG(v) TSRMG(compiler_globals_id, zend_compiler_globals *, v)int zendparse(void *compiler_globals);#else# define CG(v) (compiler_globals.v)extern ZEND_API struct _zend_compiler_globals compiler_globals;int zendparse(void);#endif/* Executor */#ifdef ZTS# define EG(v) TSRMG(executor_globals_id, zend_executor_globals *, v)#else# define EG(v) (executor_globals.v)extern ZEND_API zend_executor_globals executor_globals;#endif
EG は、executor_globals を意味します。 、Zend エグゼキュータに関連するグローバル変数
これら 2 つの構造には、PHP カーネルを理解するために非常に重要な多くの要素が含まれています。