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 相关文章推荐
用PHP写的MySQL数据库用户认证系统代码
Mar 22 PHP
深入解析php模板技术原理【一】
Jan 10 PHP
PHP5中使用PDO连接数据库的方法
Aug 01 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
Sep 23 PHP
PHP--用万网的接口实现域名查询功能
Dec 13 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
Sep 16 PHP
PHP文件上传主要代码讲解
Sep 30 PHP
php求今天、昨天、明天时间戳的简单实现方法
Jul 28 PHP
php执行多个存储过程的方法【基于thinkPHP】
Nov 08 PHP
php数组指针操作详解
Feb 14 PHP
CentOS7编译安装php7.1的教程详解
Apr 18 PHP
PHP中的self关键字详解
Jun 23 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
自己动手,丰衣足食 - 短波框形天线制作
2021/03/01 无线电
Zend的MVC机制使用分析(二)
2013/05/02 PHP
PHP统计目录中文件以及目录中目录大小的方法
2016/01/09 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
利用PHP访问带有密码的Redis方法示例
2017/02/09 PHP
几个比较实用的JavaScript 测试及效验工具
2010/04/18 Javascript
js 自动播放的实例代码
2013/11/19 Javascript
javascript中字符串的定义示例代码
2013/12/19 Javascript
javascript 获取网页标题代码实例
2014/01/22 Javascript
js判断60秒以及倒计时示例代码
2014/01/24 Javascript
js动态改变select选择变更option的index值示例
2014/07/10 Javascript
jQuery基于扩展实现的倒计时效果
2016/05/14 Javascript
Bootstrap使用基础教程详解
2016/09/05 Javascript
AngularJs入门教程之环境搭建+创建应用示例
2016/11/01 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
AngularJS实时获取并显示密码的方法
2018/02/06 Javascript
vue2.0实现前端星星评分功能组件实例代码
2018/02/12 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
2018/08/20 Javascript
vue-router为激活的路由设置样式操作
2020/07/18 Javascript
Python version 2.7 required, which was not found in the registry
2014/08/26 Python
JSON Web Tokens的实现原理
2017/04/02 Python
python中reduce()函数的使用方法示例
2017/09/29 Python
NLTK 3.2.4 环境搭建教程
2018/09/19 Python
Python绘制二维曲线的日常应用详解
2019/12/04 Python
利用jupyter网页版本进行python函数查询方式
2020/04/14 Python
猫途鹰英国网站:TripAdvisor英国(旅游社区和旅游评论)
2016/08/30 全球购物
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
电话销售经理岗位职责
2013/12/07 职场文书
学习演讲稿范文
2014/05/10 职场文书
工程部岗位职责范本
2015/04/11 职场文书
社区禁毒宣传活动总结
2015/05/07 职场文书
比赛主持人开场白
2015/05/29 职场文书
保护环境的宣传语
2015/07/13 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python
HTML基本元素标签介绍
2022/02/28 HTML / CSS
zabbix如何添加监控主机和自定义监控项
2022/08/14 Servers