Zend Parameters Parser新增类型描述符介绍
浏览:3036次 出处信息
从PHP5.3开始, zend_parse_paramters_*函数新增了如下几个新的类型描述符:
f - function or array containing php method call info (returned as
zend_fcall_info and zend_fcall_info_cache)
H - array or HASH_OF(object) (returned as HashTable*)
L - long, limits out-of-range numbers to LONG_MAX/LONG_MIN (long)
Z - the actual zval (zval**)
* - variable arguments list (0 or more)
+ - variable arguments list (1 or more)
这也使得我们做扩展开发的时候, 能更加轻松的处理输入参数, 得到想要的值.
比如没有f之前, 如果我们扩展中提供一个方法, 接受用户传入的一个回调函数, 那我们需要对用户传入的参数做判断:
1. 是字符串还是数组
2. 如果是字符串, 那么是否是一个可调用的回调函数
3. 如果是数组, 那么就分为, 调用类的静态方法, 和一个对象的方法俩种情况.
并验证他们是否是可调用的回调函数.
这个挺麻烦的吧? 而有了f, 我们就可以简单的:
PHP_FUNCTION(dummy) {
zval *retval_ptr = NULL;
zend_fcall_info fci;
zend_fcall_info_cache fci_cache;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
"f*", &fci, &fci_cache, &fci.params, &fci.param_count) == FAILURE) {
return;
}
fci.retval_ptr_ptr = &retval_ptr;
zend_call_function(&fci, &fci_cache TSRMLS_CC);
.....
}
是不是方便了很多呢?
另外, 上面的例子也顺便介绍了”*”, 这个主要用来方便可变参数函数的开发. “+”也类似.
最后要说的就是”H”.
首先我们要说说PHP的一些历史原因, 导致PHP的对象, 其实也可以作为数组来使用, 这个时候默认的它的属性就会作为数组载体.
这样, 当我们在扩展中的一个函数中申明要得到一个数组, 对于如下的object, 就无法直接调用:
$person = new StdClass(); $person->name = "Laruence"; $person->age = 28;
而如果我们在扩展的函数中使用”H”来申明我要得到一个数组, 那么如上的对象, 就可以直接作为合法参数使用了.
建议继续学习:
- Zend Studio集成Git使用 (阅读:8601)
- Zend Studio 10注册破解 (阅读:6614)
- 深入研究PHP及Zend Engine的线程安全模型 (阅读:4960)
- linux file命令是如何识别文件的类型的 (阅读:4663)
- PHP上传文件类型彻底判断方案及PHP+nginx上传大小彻底控制方案 (阅读:4557)
- 关于ci和zend framework的一些牢骚 (阅读:4462)
- PHP JAVA C上传文件如何准确判断文件类型-mime知识普及 (阅读:4223)
- Zend引擎的优化 (阅读:3935)
- Linux 系统文件描述符继承带来的危害 (阅读:3339)
- 检查 Linux 下线程库的类型 (阅读:3306)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:如何调试PHP的Core之获取基本信息
后一篇:Zend引擎的优化 >>
文章信息
- 作者:雪候鸟 来源: 风雪之隅
- 标签: Zend 描述符 类型
- 发布时间:2011-07-07 00:04:20
建议继续学习
近3天十大热文
-
[917] WordPress插件开发 -- 在插件使用 -
[135] 解决 nginx 反向代理网页首尾出现神秘字 -
[54] 整理了一份招PHP高级工程师的面试题 -
[52] Innodb分表太多或者表分区太多,会导致内 -
[52] 海量小文件存储 -
[52] 如何保证一个程序在单台服务器上只有唯一实例( -
[51] 全站换域名时利用nginx和javascri -
[50] 用 Jquery 模拟 select -
[49] CloudSMS:免费匿名的云短信 -
[48] jQuery性能优化指南
