关 键 词:
笔记 学习 开发 扩展 zval 返回 参数 php 函数 内存 复制
有许多函数在php手册里把参数或返回值类型写为mixed。那么在扩展中是如何处理的呢?所谓mixed往往就是直接解析会返回zval。
先看参数处理,还是前面用过的zend_parse_parameters:
zval* item;
zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &item);
这很简单。
然后看返回值,返回zval可以用RETURN_ZVAL宏。和前面的RETURN_LONG之类不同的是,这个宏有3个参数。第一个参数就是一个zval*。第二个和第三个参数都是0、1值。第二个参数是表示是否在返回前复制该值;第三个参数是表示在返回前是否调用析构函数。通常的用法是RETURN_ZVAL(p_zval, 1, 0);。为什么一般要把复制zval设为1呢?这和php的内存管理有关,关于内存管理后面会说。这里大概说下,因为php的垃圾回收是基于引用计数的。如果不复制一份,在函数结束后,因为返回值也是一个zval的指针,结束后php会把这个zval的引用计数-1,在一般情况下,这就会导致释放掉不该释放掉的内存,造成错误。
欢迎进入PHP开发资源论坛讨论。相关文章
图文推荐
论 坛 资 源
·php扩展开发学习笔记 1
·php设计模式介绍之单件模式 [3]
·php设计模式介绍之单件模式 [2]
·php设计模式介绍之单件模式 [1]
·Zope的优点及和Apache+PHP+MySQL的比较
·PHP面向对象、类经典教程[2]
·PHP面向对象、类经典教程[1]
·用 Xdebug 修正 PHP 应用程序中的错误(5)
·用 Xdebug 修正 PHP 应用程序中的错误(4)
·用 Xdebug 修正 PHP 应用程序中的错误(3)
·php设计模式介绍之单件模式 [3]
·php设计模式介绍之单件模式 [2]
·php设计模式介绍之单件模式 [1]
·Zope的优点及和Apache+PHP+MySQL的比较
·PHP面向对象、类经典教程[2]
·PHP面向对象、类经典教程[1]
·用 Xdebug 修正 PHP 应用程序中的错误(5)
·用 Xdebug 修正 PHP 应用程序中的错误(4)
·用 Xdebug 修正 PHP 应用程序中的错误(3)
热门技术文档
·php扩展开发学习笔记 6
·php扩展开发学习笔记 4
·php扩展开发学习笔记 3
·php扩展开发学习笔记 2
·php扩展开发学习笔记 1
·php设计模式介绍之单件模式 [3]
·php设计模式介绍之单件模式 [2]
·php设计模式介绍之单件模式 [1]
·Zope的优点及和Apache+PHP+MySQL的比较
·Windows 下的 PHP 扩展编程
·php扩展开发学习笔记 4
·php扩展开发学习笔记 3
·php扩展开发学习笔记 2
·php扩展开发学习笔记 1
·php设计模式介绍之单件模式 [3]
·php设计模式介绍之单件模式 [2]
·php设计模式介绍之单件模式 [1]
·Zope的优点及和Apache+PHP+MySQL的比较
·Windows 下的 PHP 扩展编程
最新图文档
本站编辑推荐:(本站开通Delphi4PHP专区,欢迎进入论坛交流!)
- · 3分钟快速了解 Delphi for PHP 特色 (中文), PDF档
- · 购买Delphi for PHP的五大理由, PDF档
- · Delphi for PHP 使用规格介绍, PDF档
- · Delphi for PHP 問答集 (From CodeGear)
- · Delphi for PHP 产品价格表
编缉最近更新文章
网站赞助商
搜索您感兴趣的内容




