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 相关文章推荐
set_include_path在win和linux下的区别
Jan 10 PHP
精通php的十大要点(上)
Feb 04 PHP
linux下为php添加curl扩展的方法
Jul 29 PHP
php实现多张图片上传加水印技巧
Apr 18 PHP
php提示Failed to write session data错误的解决方法
Dec 17 PHP
深入理解PHP变量的值类型和引用类型
Oct 21 PHP
php获取远程文件的内容和大小
Nov 03 PHP
必须收藏的php实用代码片段
Feb 02 PHP
PHP中file_exists使用中遇到的问题小结
Apr 05 PHP
PHP使用strrev翻转中文乱码问题的解决方法
Jan 13 PHP
php多文件打包下载的实例代码
Jul 12 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
Mar 09 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
加强版phplib的DB类
2008/03/31 PHP
CodeIgniter基本配置详细介绍
2013/11/12 PHP
PHP字符串中特殊符号的过滤方法介绍
2014/02/18 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
2018/12/25 PHP
php curl获取https页面内容,不直接输出返回结果的设置方法
2019/01/15 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
2019/12/04 PHP
[原创]保存的js无法执行的解决办法
2007/02/25 Javascript
javascript Array数组对象的扩展函数代码
2010/05/22 Javascript
JS遮罩层效果 兼容ie firefox jQuery遮罩层
2010/07/26 Javascript
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
JavaScript 数组详解
2013/10/10 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
ajax的分页查询示例(不刷新页面)
2017/01/11 Javascript
五步轻松实现zTree的使用
2017/11/01 Javascript
JavaScript实现AOP详解(面向切面编程,装饰者模式)
2017/12/19 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
微信小程序音乐播放器开发
2019/11/20 Javascript
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
详解React的回调渲染模式
2020/09/10 Javascript
[05:10]2014DOTA2国际邀请赛 通往胜利之匙赛场探秘之旅
2014/07/18 DOTA
[40:16]TFT vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python3 伪装浏览器的方法示例
2017/11/23 Python
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
Python3之读取连接过的网络并定位的方法
2018/04/22 Python
python使用webdriver爬取微信公众号
2018/08/31 Python
django 将model转换为字典的方法示例
2018/10/16 Python
python3爬虫获取html内容及各属性值的方法
2018/12/17 Python
Windows上安装tensorflow  详细教程(图文详解)
2020/02/04 Python
解决numpy矩阵相减出现的负值自动转正值的问题
2020/06/03 Python
JACK & JONES英国官方网站:欧洲领先的男装生产商
2017/09/27 全球购物
《再别康桥》教学反思
2014/02/12 职场文书
《最可爱的人》教学反思
2014/02/14 职场文书
《雨点儿》教学反思
2014/04/14 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
因个人原因离职的辞职信范文
2015/05/12 职场文书