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 按指定元素值去除数组元素的实现方法
Nov 04 PHP
php摘要生成函数(无乱码)
Feb 04 PHP
真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )
Oct 24 PHP
用php制作简单分页(从数据库读取记录)的方法详解
May 04 PHP
关于PHPDocument 代码注释规范的总结
Jun 25 PHP
PHP SPL使用方法和他的威力
Nov 12 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
Jun 19 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
Oct 23 PHP
PHP防盗链的基本思想 防盗链的设置方法
Sep 25 PHP
PHP基于ORM方式操作MySQL数据库实例
Jun 21 PHP
php ajax数据传输和响应方法
Aug 21 PHP
PHP实现微信退款功能
Oct 02 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修改session_id示例代码
2014/01/08 PHP
PHP函数getenv简介和使用实例
2014/05/12 PHP
Symfony数据校验方法实例分析
2015/01/26 PHP
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
2009/09/09 Javascript
如何使用Javascript正则表达式来格式化XML内容
2013/07/04 Javascript
js 编码转换 gb2312 和 utf8 互转的2种方法
2013/08/07 Javascript
js中replace的用法总结
2013/12/27 Javascript
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
JS实现很酷的水波文字特效实例
2015/02/26 Javascript
JavaScript调用浏览器打印功能实例分析
2015/07/17 Javascript
Bootstrap学习笔记之css样式设计(1)
2016/06/07 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/06 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
layUI实现列表查询功能
2019/07/27 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
2020/04/10 Javascript
基于VUE实现判断设备是PC还是移动端
2020/07/03 Javascript
js正则表达式简单校验方法
2021/01/03 Javascript
python数字图像处理之高级滤波代码详解
2017/11/23 Python
Python中return self的用法详解
2018/07/27 Python
5分钟 Pipenv 上手指南
2018/12/20 Python
如何使用Python实现自动化水军评论
2019/06/26 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
Python初学者常见错误详解
2019/07/02 Python
Django 批量插入数据的实现方法
2020/01/12 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
Python pymsql模块的使用
2020/09/07 Python
利用CSS3实现进度条的两种姿势详解
2017/03/21 HTML / CSS
体育教师自我鉴定
2014/02/12 职场文书
经销商订货会主持词
2014/03/27 职场文书
严以律己专题学习研讨会发言材料
2015/11/09 职场文书
高二英语教学反思
2016/03/03 职场文书
python for循环赋值问题
2021/06/03 Python
教你怎么用Python实现GIF动图的提取及合成
2021/06/15 Python