博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php常量
阅读量:6322 次
发布时间:2019-06-22

本文共 1188 字,大约阅读时间需要 3 分钟。

  hot3.png

常量的内部结构
Zend/zend_constants.htypedef struct _zend_constant {	    zval value; /* zval结构,PHP内部变量的存储结构 */	    int flags;  /* 常量的标记如 CONST_PERSISTENT | CONST_CS */	    char *name; /* 常量名称 */	    uint name_len; /* 名称长度 */	    int module_number;  /* 模块号 */} zend_constant;

php的define函数

Zend/zend_builtin_functions.c

c.value = *val;zval_copy_ctor(&c.value);if (val_free) {	zval_ptr_dtor(&val_free);}c.flags    = case_sensitive; /* non persistent */c.name     = zend_strndup(name, name_len);c.name_len = name_len+1;c.module_number = PHP_USER_CONSTANT;if (zend_register_constant(&c TSRMLS_CC) == SUCCESS) {	RETURN_TRUE;} else {	RETURN_FALSE;}

php 的defined函数

if (zend_get_constant_ex(name, name_len, &c, NULL, ZEND_FETCH_CLASS_SILENT TSRMLS_CC)) {	zval_dtor(&c);	RETURN_TRUE;} else {	RETURN_FALSE;}

zend_get_constant_ex调用zend_get_constantzend_hash_find(EG(zend_constants), name, name_len+1, (void **) &c)

 

 php注册常量的步骤

php_cgi_startup() -> php_module_startup() ->zend_startup() -> zend_register_standard_constants()->zend_register_constant()

zend_hash_add(EG(zend_constants), name, c->name_len, (void *) c,	        sizeof(zend_constant), NULL)==FAILURE)

 

转载于:https://my.oschina.net/clearchen/blog/73775

你可能感兴趣的文章
gf框架之分页模块(一) - 基本介绍
查看>>
区块链概念 That You Must Know 第四期(1)
查看>>
PHP 包与扩展的管理工具 Pear、Composer 与 Pecl
查看>>
IP协议总结
查看>>
JavaScript 强制类型转换
查看>>
关于 weex 安装weex debug时遇到的问题
查看>>
android悬浮窗、收款二维码、相机处理、事件通知库、NFC读取等源码
查看>>
编码习惯之异常处理
查看>>
使用 Apache cxf 创建 WebService 服务端
查看>>
浏览器本地存储
查看>>
logback学习
查看>>
Vuex 小tip
查看>>
数据的存储区域
查看>>
【quickhybrid】iOS端的项目实现
查看>>
【323天】跃迁之路——程序员高效学习方法论探索系列(实验阶段81-2017.12.25)...
查看>>
PHP解析之十六个魔术方法详解
查看>>
Treiber Stack简单分析
查看>>
Vue2.0二——模板语法、计算属性、watch、filter、过渡、directive、keep-alive
查看>>
redux源码分析之三:bindActionCreators.js
查看>>
2017 非标准 PHP 框架性能测试比较
查看>>