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 相关文章推荐
我的论坛源代码(三)
Oct 09 PHP
phpinfo 系统查看参数函数代码
Jun 05 PHP
通过PHP修改Linux或Unix口令的方法分享
Jan 30 PHP
彻底删除thinkphp3.1案例blog标签的方法
Dec 05 PHP
php 5.6版本中编写一个PHP扩展的简单示例
Jan 20 PHP
PHP解密Unicode及Escape加密字符串
May 17 PHP
Java中final关键字详解
Aug 10 PHP
46 个非常有用的 PHP 代码片段
Feb 16 PHP
ThinkPHP简单使用memcache缓存的方法
Nov 15 PHP
php实现给二维数组中所有一维数组添加值的方法
Feb 04 PHP
使用ThinkPHP生成缩略图及显示
Apr 27 PHP
PHP实现分布式memcache设置web集群session同步的方法
Apr 10 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
超级简单的发送邮件程序
2006/10/09 PHP
php在字符串中查找另一个字符串
2008/11/19 PHP
php discuz 主题表和回帖表的设计
2009/03/13 PHP
php 生成短网址原理及代码
2014/01/23 PHP
PHP让网站移动访问更加友好方法
2019/02/14 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
zeroclipboard复制到剪切板的flash
2010/08/04 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
2013/10/29 Javascript
Javascript实现颜色rgb与16进制转换的方法
2015/04/18 Javascript
javascript常用方法总结
2015/05/14 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
全面解析Bootstrap中transition、affix的使用方法
2016/05/30 Javascript
微信小程序实现实时圆形进度条的方法示例
2017/02/24 Javascript
HTML的select控件美化
2017/03/27 Javascript
详解Vue 事件驱动和依赖追踪
2017/04/22 Javascript
JS基于for语句编写的九九乘法表示例
2018/01/04 Javascript
vue中input的v-model清空操作
2019/09/06 Javascript
Javascript异步执行不按顺序解决方案
2020/04/30 Javascript
Vue实现简单的拖拽效果
2020/08/25 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
简单谈谈Python中的闭包
2016/11/30 Python
PyTorch CNN实战之MNIST手写数字识别示例
2018/05/29 Python
PyQt5创建一个新窗口的实例
2019/06/20 Python
pycharm配置git(图文教程)
2019/08/16 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
班级活动策划书
2014/02/06 职场文书
农村婚礼主持词
2014/03/13 职场文书
青安岗事迹材料
2014/05/14 职场文书
村容村貌整治方案
2014/05/21 职场文书
超市客服工作职责
2014/06/11 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
简爱电影观后感
2015/06/10 职场文书
活动简报范文
2015/07/22 职场文书