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正则表达式之定界符和原子介绍
Oct 05 PHP
调整PHP的性能
Oct 30 PHP
XAMPP安装与使用方法详细解析
Nov 27 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
Dec 20 PHP
php读取纯真ip数据库使用示例
Jan 26 PHP
php猜单词游戏
Sep 29 PHP
php微信浏览器分享设置以及回调详解
Aug 01 PHP
php 自定义错误日志实例详解
Nov 12 PHP
PHP构造二叉树算法示例
Jun 21 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
Oct 25 PHP
gearman中任务的优先级和返回状态实例分析
Feb 27 PHP
PHP开发API接口签名生成及验证操作示例
May 27 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 定义404页面的实现代码
2012/11/19 PHP
Zend Framework数据库操作技巧总结
2017/02/18 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
2017/07/16 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
js 弹出菜单/窗口效果
2011/10/30 Javascript
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
js判断屏幕分辨率的代码
2013/07/16 Javascript
jquery实现树形二级菜单实例代码
2013/11/20 Javascript
js实现飞入星星特效代码
2014/10/17 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
JavaScript匿名函数用法分析
2015/02/13 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
关于vue-router的那些事儿
2018/05/23 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
vue resource发送请求的几种方式
2019/09/30 Javascript
详解vue中v-model和v-bind绑定数据的异同
2020/08/10 Javascript
[50:29]2014 DOTA2华西杯精英邀请赛 5 24 DK VS iG
2014/05/26 DOTA
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
python开发利器之ulipad的使用实践
2017/03/16 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
python Django编写接口并用Jmeter测试的方法
2019/07/31 Python
Python实现快速排序的方法详解
2019/10/25 Python
Python OrderedDict字典排序方法详解
2020/05/21 Python
python中not、and和or的优先级与详细用法介绍
2020/11/03 Python
某个公司的Java笔面试题
2016/03/11 面试题
工商管理专业应届生求职信
2013/11/04 职场文书
司机的工作范围及职责
2013/11/13 职场文书
学校做一个有道德的人活动方案
2014/08/23 职场文书
加强作风建设工作总结
2014/10/23 职场文书
学习与创新自我评价
2015/03/09 职场文书
2015年度个人教学工作总结
2015/05/20 职场文书
运动会口号霸气押韵
2015/12/24 职场文书
医学会议开幕词
2016/03/03 职场文书
Vue通过懒加载提升页面响应速度
2021/05/10 Vue.js