在内核中常量存储在EG(zend_constant)
哈希表中,访问时也是根据常量名直接到哈希表中查找,其实现比较简单。
常量的数据结构:
typedef struct _zend_constant {
zval value; //常量值
zend_string *name; //常量名
int flags; //常量标识位
int module_number; //所属扩展、模块
} zend_constant;
常量的几个属性都比较直观,这里只介绍下flags,它的值可以是以下三个中任意组合:
#define CONST_CS (1<<0) //大小写敏感
#define CONST_PERSISTENT (1<<1) //持久化的
#define CONST_CT_SUBST (1<<2) //允许编译时替换
介绍下三种flag代表的含义: