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 相关文章推荐
基于Zend的Captcha机制的应用
May 02 PHP
php接口与接口引用的深入解析
Aug 09 PHP
php中\r \r\n \t的区别示例介绍
Feb 08 PHP
php环境无法上传文件的解决方法
Apr 30 PHP
php+memcache实现的网站在线人数统计代码
Jul 04 PHP
PHP实现的英文名字全拼随机排号脚本
Jul 04 PHP
PHP实现获取并生成数据库字典的方法
May 04 PHP
Yii多表联合查询操作详解
Jun 02 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
Jul 03 PHP
详解php中curl返回false的解决办法
Mar 18 PHP
浅谈PHP中的Trait使用方法
Mar 22 PHP
PHP7创建销毁session的实例方法
Feb 03 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
基于MySQL到MongoDB简易对照表的详解
2013/06/03 PHP
PHP在线打包下载功能示例
2016/10/15 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
初学js插入节点appendChild insertBefore使用方法
2011/07/04 Javascript
浅析javascript中函数声明和函数表达式的区别
2015/02/15 Javascript
JavaScript列表框listbox全选和反选的实现方法
2015/03/18 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
简单谈谈require模块化jquery和angular的问题
2017/06/23 jQuery
JavaScript之class继承_动力节点Java学院整理
2017/07/03 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
JS原生瀑布流效果实现
2019/04/26 Javascript
微信小程序实现点击效果
2019/06/21 Javascript
vue+elementUI实现图片上传功能
2019/08/20 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
Python编程深度学习绘图库之matplotlib
2018/12/28 Python
python实现电子产品商店
2019/02/26 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
Django框架HttpRequest对象用法实例分析
2019/11/01 Python
Python中SQLite如何使用
2020/05/27 Python
详解python如何引用包package
2020/06/07 Python
用python写爬虫简单吗
2020/07/28 Python
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
历史学专业个人的自我评价
2013/10/13 职场文书
年度考核自我鉴定
2014/02/02 职场文书
怎么写自荐书范文
2014/02/12 职场文书
中式婚礼主持词
2014/03/13 职场文书
战略合作协议书范本
2014/04/18 职场文书
建设工地安全标语
2014/06/07 职场文书
四风问题个人对照检查剖析材料
2014/09/27 职场文书
赵乐秦在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
工程部主管岗位职责
2015/02/12 职场文书
React Hook用法示例详解(6个常见hook)
2021/04/28 Javascript