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自动反斜杠的函数代码
Jan 05 PHP
解析PHP实现多进程并行执行脚本
Jun 18 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
Nov 20 PHP
php准确获取文件MIME类型的方法
Jun 17 PHP
WordPress主题制作之模板文件的引入方法
Dec 28 PHP
详解PHP实现异步调用的4种方法
Mar 14 PHP
php结合mysql与mysqli扩展处理事务的方法
Jun 29 PHP
PHP编写daemon process详解及实例代码
Sep 30 PHP
详解PHP原生DOM对象操作XML的方法
Oct 17 PHP
PHP对象实例化单例方法
Jan 19 PHP
yii2局部关闭(开启)csrf的验证的实例代码
Jul 10 PHP
PHP生成图表pChart的示例解析
Jul 31 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配合Javascript实现文件上传进度条功能
2014/10/15 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
ext form 表单提交数据的方法小结
2008/08/08 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
2016/12/25 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
2017/03/21 Javascript
iscroll-probe实现下拉刷新和下拉加载效果
2017/06/28 Javascript
解决使用vue.js路由后失效的问题
2018/03/17 Javascript
微信小程序将字符串生成二维码图片的操作方法
2018/07/17 Javascript
解决vue路由后界面没有变化,但是链接有的问题
2018/09/01 Javascript
vue踩坑记-在项目中安装依赖模块npm install报错
2019/04/02 Javascript
vue任意关系组件通信与跨组件监听状态vue-communication
2020/10/18 Javascript
vue实现抽屉弹窗效果
2020/11/15 Javascript
[14:20]刀塔大凶女神互压各路奇葩屌丝
2014/05/16 DOTA
Python优先队列实现方法示例
2017/09/21 Python
Python程序运行原理图文解析
2018/02/10 Python
Python集合基本概念与相关操作实例分析
2019/10/30 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
CSS3制作半透明边框(Facebox)类似渐变
2012/12/09 HTML / CSS
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
Osklen官方在线商店:巴西服装品牌
2019/04/25 全球购物
标准导师推荐信(医学类)
2013/10/28 职场文书
会计学自我鉴定
2014/02/06 职场文书
中学生学雷锋演讲稿
2014/04/26 职场文书
村庄绿化方案
2014/05/07 职场文书
倡议书格式
2014/08/30 职场文书
写给老师的感谢信
2015/01/20 职场文书
趵突泉导游词
2015/02/03 职场文书
护士节慰问信
2015/02/15 职场文书
会计求职自荐信范文
2015/03/04 职场文书
志愿者工作心得体会
2016/01/15 职场文书
浅谈Python numpy创建空数组的问题
2021/05/25 Python