PHP扩展迁移为PHP7扩展兼容性问题记录


Posted in PHP onFebruary 15, 2016

PHP7扩展编写的时候,提供的一些内核方法和之前的PHP之前的版本并不能完全兼容。有不少方法参数做了调整。下面是在迁移过程中遇到的一些问题。记录下来,避免大家再踩坑。

add_assoc_stringl

方法参数改为四个。

add_assoc_stringl(parray, key, value, value_len);

迁移的时候,只要把最后一个参数删除即可。

add_assoc_string

方法参数从四个改为了三个。

add_assoc_stringl(parray, key, value);

迁移的时候,只要把最后一个参数删除即可。

add_next_index_stringl

方法参数从四个改为了三个。

add_next_index_stringl(parray, value, value_len);

迁移的时候,只要把最后一个参数删除即可。

add_next_index_string

方法参数从三个改为了两个。

add_next_index_string(parray, value);

迁移的时候,只要把最后一个参数删除即可。

RETURN_STRINGL

方法参数从三个改为了二个。

RETURN_STRINGL(value, length);

迁移的时候,只要把最后一个参数删除即可。

错误:‘INT64_MAX' 在此作用域中尚未声明

原因为深入研究。在 #include "php.h" 上面加上一行

#include <stdint.h> 
#ifndef INT64_MAX
# define INT64_MAX INT64_C( 9223372036854775807)
#endif
#ifndef INT64_MIN
# define INT64_MIN (-INT64_C( 9223372036854775807)-1)
#endif

解决。

创建类

可以参考mysqli扩展mysqli.c文件中的 mysqli_objects_new 方法。

变量声明从堆上分配,改为栈上分配。

如,原先代码为

zval* sarray_l;
ALLOC_INIT_ZVAL(sarray_l);
array_init(sarray_l);

改为

zval sarray_l;
array_init(&sarray_l);
zend_hash_get_current_key_ex

方法参数从六个改为了四个。

ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_ex(const HashTable *ht, zend_string **str_index, zend_ulong *num_index, HashPosition *pos);

迁移的时候,只要把第三个和第五个参数删除即可。

错误:‘Z_TYPE_PP' 在此作用域中尚未声明

已经没有Z_TYPE_PP宏,只有Z_TYPE 和Z_TYPE_P宏方法的定义。

h2错误:不能从 ‘zend_string*' 转换到 ‘const char*'

PHP7中对于字符串的处理使用zend_string进行存储。如果想把zend_string 转为 const char 。需要使用 ZSTR_VAL()宏方法。代码如下:

zend_string *str;
char *sptr;
.....
sptr = ZSTR_VAL(str);

错误:‘IS_BOOL' 在此作用域中尚未声明

已经没有IS_BOOL类型。而是分为了IS_TRUE 和 IS_FALSE.

错误:‘Z_BVAL' 在此作用域中尚未声明

已经没有Z_BVAL宏。但是可以通过类型是否是 IS_TRUE和IS_FALSE来判定。

如果类型为IS_TRUE,则值为true。如果类型为IS_FALSE则值为false。

错误:‘zend_object_store_get_object' 在此作用域中尚未声明

增加如下代码:

static inline hsf_object *hsf_fetch_object(zend_object *obj) /* {{{ */ {
return (user_object *)((char*)(obj) - XtOffsetOf(user_object, std));
}
/* }}} */
#define Z_USEROBJ_P(zv) hsf_fetch_object(Z_OBJ_P((zv)))

然后把zend_object_store_get_object改为Z_USEROBJ_P即可。

注意,user_object是你定义的结构体。

以上所述是针对PHP扩展迁移为PHP7扩展兼容性问题记录的相关叙述,希望对大家有所帮助。

PHP 相关文章推荐
PHP5中的this,self和parent关键字详解教程
Mar 19 PHP
php smarty 二级分类代码和模版循环例子
Jun 16 PHP
php对数组排序的简单实例
Dec 25 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
Jan 07 PHP
dedecms函数分享之获取某一栏目所有子栏目
May 19 PHP
简单解析PHP程序的运行流程
Jun 23 PHP
php array_slice 取出数组中的一段序列实例
Nov 04 PHP
php+ajax简单实现全选删除的方法
Dec 06 PHP
PHP弱类型语言中类型判断操作实例详解
Aug 10 PHP
PHP的PDO大对象(LOBs)
Jan 27 PHP
PHP设计模式之PHP迭代器模式讲解
Mar 22 PHP
PHP INT类型在内存中占字节详解
Jul 20 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
Feb 15 #PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
Feb 14 #PHP
php socket通信(tcp/udp)实例分析
Feb 14 #PHP
PHP检测用户是否关闭浏览器的方法
Feb 14 #PHP
php中的常用魔术方法汇总
Feb 14 #PHP
详解php魔术方法(Magic methods)的使用方法
Feb 14 #PHP
PHP浮点比较大小的方法
Feb 14 #PHP
You might like
如何使用PHP往windows中添加用户
2006/12/06 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
Yii中CGridView实现批量删除的方法
2015/12/28 PHP
PHP关键特性之命名空间实例详解
2017/05/06 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
document.open() 与 document.write()的区别
2007/08/13 Javascript
JavaScript的变量作用域深入理解
2009/10/25 Javascript
JavaScript中常见陷阱小结
2010/04/27 Javascript
6款新颖的jQuery和CSS3进度条插件推荐
2013/03/05 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
jQuery的基本概念与高级编程
2015/05/14 Javascript
Angularjs中UI Router全攻略
2016/01/29 Javascript
分享自己用JS做的扫雷小游戏
2016/02/17 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
利用jQuery中的ajax分页实现代码
2016/02/25 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
2016/06/16 Javascript
angularJS 如何读写缓冲的方法(推荐)
2016/08/06 Javascript
轻松实现js选项卡切换效果
2016/09/24 Javascript
Kotlin学习第一步 kotlin语法特性
2017/05/25 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
简单两步使用node发送qq邮件的方法
2019/03/01 Javascript
vue微信分享的实现(在当前页面分享其他页面)
2019/04/16 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
[02:49:21]2019完美盛典全程录像
2019/12/08 DOTA
学习python (1)
2006/10/31 Python
django 简单实现登录验证给你
2019/11/06 Python
python3下pygame如何实现显示中文
2020/01/11 Python
Python如何重新加载模块
2020/07/29 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
Hawes & Curtis澳大利亚官网:英国经典服饰品牌
2018/10/29 全球购物
财务管理专业应届毕业生求职信
2013/09/22 职场文书
幼儿园毕业典礼主持词
2014/03/21 职场文书
公司晚会主持词
2014/03/22 职场文书
个人安全生产承诺书
2014/05/22 职场文书
2015年预防青少年违法犯罪工作总结
2015/05/22 职场文书