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 相关文章推荐
为php4加入动态flash文件的生成的支持
Oct 09 PHP
一个目录遍历函数
Oct 09 PHP
PHP中一个控制字符串输出的函数
Oct 09 PHP
phplock(php进程锁) v1.0 beta1
Nov 24 PHP
解析:通过php socket并借助telnet实现简单的聊天程序
Jun 18 PHP
php解析json数据实例
Aug 19 PHP
php利用cookies实现购物车的方法
Dec 10 PHP
php+mysql删除指定编号员工信息的方法
Jan 14 PHP
php中file_exists函数使用详解
May 08 PHP
使用图灵api创建微信聊天机器人
Jul 23 PHP
Symfony的安装和配置方法
Mar 17 PHP
laravel框架邮箱认证实现方法详解
Nov 22 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里得到前天和昨天的日期的代码
2007/08/16 PHP
apache php模块整合操作指南
2012/11/16 PHP
浅谈本地WAMP环境的搭建
2015/05/13 PHP
快速解决PHP调用Word组件DCOM权限的问题
2017/12/27 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
2018/05/23 PHP
javascript URL编码和解码使用说明
2010/04/12 Javascript
jQuery创建自己的插件(自定义插件)的方法
2010/06/10 Javascript
Ajax执行顺序流程及回调问题分析
2012/12/10 Javascript
jQuery()方法的第二个参数详解
2015/04/29 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
JavaScript实现自动切换图片代码
2016/10/11 Javascript
Angular2库初探
2017/03/01 Javascript
使用Fullpage插件快速开发整屏翻页的页面
2017/09/13 Javascript
使用javascript函数编写简单银行取钱存钱流程
2018/05/26 Javascript
Vue cli构建及项目打包以及出现的问题解决
2018/08/27 Javascript
d3.js 地铁轨道交通项目实战
2019/11/27 Javascript
js实现小时钟效果
2020/03/25 Javascript
详解vue组件之间的通信
2020/08/30 Javascript
谈谈node.js中的模块系统
2020/09/01 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
详解ES6 中的Object.assign()的用法实例代码
2021/01/11 Javascript
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
python操作mysql代码总结
2018/06/01 Python
Python装饰器用法实例分析
2019/01/14 Python
用Python实现最速下降法求极值的方法
2019/07/10 Python
超全Python图像处理讲解(多模块实现)
2020/04/13 Python
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
荷兰网上买鞋:MooieSchoenen.nl
2017/09/12 全球购物
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
英国著名书店:Foyles
2018/12/01 全球购物
Lentiamo丹麦:购买便宜的隐形眼镜
2021/01/13 全球购物
员工考核管理制度
2014/02/02 职场文书
求职自荐信怎么写
2014/03/06 职场文书
营销总监岗位职责
2014/09/16 职场文书
CSS极坐标的实例代码
2021/06/03 HTML / CSS
JS前端监控采集用户行为的N种姿势
2022/07/23 Javascript