php常量的实现

1.php的常量 就是一个简单的标识符,脚本执行期间不会改变,大小写敏感,默认大写。

常量的存储结构

typedef struct _zend_constant {
    zval value;   //常量值
    zend_string *name; //常量名
    int flags;  //常量标识位
    int module_number; //所属扩展、模块
} zend_constant;

   flag代表的含义 : CONST_CS: 大小写敏感

                            CONST_PERSISTENT: 持久化的(只有通过扩展、内核定义的才支持,这种常量不会在request结束时清理掉)

                            CONST_CT_SUBST: 允许编译时替换      (编译时如果发现有地方在读取常量的值,那么编译器会尝试直接替换为常量值-》TRUE、FALSE、NULL)

常量的销毁   常量存储在EG(zend_constants)哈希表中,根据常量名直接查找hash表

                  非持久化常量在request请求结束时销毁,从哈希表末尾开始向前遍历EG(zend_constants),将非持久化常量删除,直到碰到第一个持久化常量时,停止遍历,正常情况下所有通过扩展定义的常量一定是在PHP中通过define定义之前。

                  持久化常量是在php_module_shutdown()阶段销毁的

         

猜你喜欢

转载自www.cnblogs.com/hellohell/p/9100724.html
今日推荐