Szopen Xiao

PHP Zend 引擎全局宏介绍

2014-11-24

Zend引擎的全局宏定义在/php-src/Zend/zend_globals_macros.h 文件中,这里主要记录EG宏与CG宏,宏关联的数据结构定义在/php-src/Zend/zend_globals.h文件中.

###CG
本宏关联的数据结构定义为_zend_compiler_globals. 宏中包含了以下主要数据,这些数据都是在Zend解释PHP代码过程中定义 :

  1. function_table 定义的函数的符号表
  2. class_table 定义的类的符号表
  3. filenames_table 文件名列表,是PHP Zend引擎打开的文件
  4. auto_globals 自动全局变量符号表,这个表存放了超全局变量,比如$_SESSION, $GLOBALS之类的

###EG
本宏关联的数据结构定义为_zend_executor_globals. 宏中包含了以下主要数据:

  1. included_files 包含的文件列表
  2. function_table 执行过程中定义的函数符号表
  3. class_table 定义的类的符号表
  4. zend_constants 定义的常量表
  5. ini_directives ini文件定义信息
  6. modified_ini_directives 更新后的ini定义信息
  7. symbol_table 变量符号表

以上只是部分信息,另外还有LANG_SCNGINI_SCNG

###TSRMLS_C
TSRMLS开头的宏都定义在/php-src/TSRM/TSRM.h文件中, 其他相关的有: TSRMLS_C定义为tsrm_ls线程存储器
TSRMLS_CC对应了, TSRMLS_C可以用于函数传参
TSRMLS_D对应了void ***tsrm_ls
TSRMLS_DC对应, TSRMLS_D
tsrm_ls在执行TSRMLS_FETCH指向了函数ts_resource_ex,函数定义在/php-src/TSRM/TSRM.c中,启用线程安全后TSRMLS_FETCH()将会被首先执行 当未启用ZTS即Zend线程安全的时候这些宏被设置为空

comments powered by Disqus