没有合适的资源?快使用搜索试试~ 我知道了~
PHP程序设计-3期(KC016) 拓展知识2-2 自定义常量.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 77 浏览量
2022-07-13
11:12:15
上传
评论
收藏 15KB DOC 举报
温馨提示
试读
2页
PHP程序设计-3期(KC016) 拓展知识2-2 自定义常量.doc 学习资料 复习资料 教学资源
资源推荐
资源详情
资源评论
拓展知识 2-2 自定义常量
一般情况下,在扩展中只建议定义 null,bool,long,double,string 几种类型的常量。
因为内核只提供了这几种类型的宏方法。
常量定义的宏方法在 Zend/zend_constants.h 文件中。想定义一个常量,很简单,只要
调用对应的宏方法即可。
REGISTER_STRINGL_CONSTANT("__SITE__", "www.bo56.com", 12, CONST_PERSISTENT);
宏方法的最后一个参数是一些标识符。
CONST_PERSISTENT 表示为持久的。常驻内存。
CONST_CS 表示为区分大小写。
注意我们上面定义常量时使用的是__SITE__,但是调用的时候使用的是__site__。
还有一套可以指定命名空间的宏方法。宏方法中带 NS。如:
REGISTER_NS_STRINGL_CONSTANT("say", "__SITE__", "bo56.com", 8,
CONST_CS|CONST_PERSISTENT);
第一个参数就是命名空间。
为了展示常量定义的一些细节。我们定义了一个__ARR__常量。
ZVAL_NEW_PERSISTENT_ARR(&c.value); 我 们 想 让 __ARR__ 为 持 久 的 。 所 以 使 用
ZVAL_NEW_PERSISTENT_ARR 创建一个数组。
数组创建完后,我们需要初始化。初始化的代码就是
zend_hash_init(Z_ARRVAL(c.value), 0, NULL,
(dtor_func_t)say_entry_dtor_persistent, 1);
参数中的 say_entry_dtor_persistent 是一个析构函数,用于释放数组的元素。
到这里,如果编译运行。当程序执行结束的时候,你会发现一个致命错误。错误信息如
下:Fatal error: Internal zval's can't be arrays, objects or resources in Unknown
on line 0
因为在程序执行完毕,内部 zval 释放的时候,会进行类型检测。如果发现是 array object
或者 resources,则会报错。可以查看 Zend/zend_variables.c 文件中 _zval_internal_dtor
方法。
为了解决这个问题,我们需要手动释放我们创建的__ARR__相关的数组。
资源评论
努力搬砖的小王
- 粉丝: 16
- 资源: 7706
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功