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 相关文章推荐
基于mysql的bbs设计(三)
Oct 09 PHP
php面向对象全攻略 (十) final static const关键字的使用
Sep 30 PHP
php 获取一个月第一天与最后一天的代码
May 16 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
Jul 16 PHP
深入解析Session是否必须依赖Cookie
Aug 02 PHP
php旋转图片90度的方法
Nov 07 PHP
Windows7下的php环境配置教程
Feb 28 PHP
PHP session文件独占锁引起阻塞问题解决方法
May 12 PHP
PHP+swoole实现简单多人在线聊天群发
Jan 19 PHP
PHP高效获取远程图片尺寸和大小的实现方法
Oct 20 PHP
使用laravel和ECharts实现折线图效果的例子
Oct 09 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 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采集自中央气象台范围覆盖全国的天气预报代码实例
2015/01/04 PHP
PHP计算加权平均数的方法
2015/07/16 PHP
PHP使用array_merge重新排列数组下标的方法
2015/07/22 PHP
Laravel框架Blade模板简介及模板继承用法分析
2019/12/03 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
JS获取scrollHeight问题想到的标准问题
2007/05/27 Javascript
Javascript this关键字使用分析
2008/10/21 Javascript
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
Jquery中使用setInterval和setTimeout的方法
2013/04/08 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
四种参数传递的形式——URL,超链接,js,form表单
2015/07/24 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
2015/09/07 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
简单实现jquery隔行变色
2017/11/09 jQuery
Vue实现active点击切换方法
2018/03/16 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
详解Python的Django框架中manage命令的使用与扩展
2016/04/11 Python
Python批量查询域名是否被注册过
2017/06/21 Python
pyspark操作MongoDB的方法步骤
2019/01/04 Python
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
2019/02/14 Python
python f-string式格式化听语音流程讲解
2019/06/18 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
2020/04/07 Python
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
网络工程专业自荐信范文
2014/03/16 职场文书
个人贷款承诺书
2014/03/28 职场文书
中医学专业自荐信范文
2014/04/01 职场文书
王力宏牛津大学演讲稿
2014/05/22 职场文书
作风转变心得体会
2014/09/02 职场文书
不同意离婚答辩状
2015/05/22 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python
django学习之ajax post传参的2种格式实例
2021/05/14 Python
windows安装python超详细图文教程
2021/05/21 Python