PHP扩展迁移为PHP7扩展兼容性问题记录

 更新时间:2016年2月18日 10:11  点击:1524

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扩展兼容性问题记录的相关叙述,希望对大家有所帮助。

[!--infotagslink--]

相关文章

  • golang 调用 php7详解及实例

    这篇文章主要介绍了golang 调用 php7详解及实例的相关资料,需要的朋友可以参考下...2017-01-15
  • 带你了解PHP7 性能翻倍的关键

    20岁老牌网页程序语言PHP,最快将在10月底释出PHP 7新版,这是十年来的首次大改版,最大特色是在性能上的大突破,能比前一版PHP 5快上一倍,PHP之父Rasmus Lerdorf表示,甚至能比HHVM虚拟机下的PHP程序性能更快。HHVM 是脸书为自...2015-11-24
  • linux中编译安装PHP7并安装Redis扩展Swoole扩展

    前面一篇文章告诉各位简单的安装Redis的方法了,下面我们进行升级了实现在linux中编译安装PHP7并安装Redis扩展Swoole扩展的方法。 编译安装PHP7并安装Redis扩展Swo...2016-11-25
  • PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )

    这篇文章主要介绍了PHP中eAccelerator、memcached、xcache、APC 4个加速、缓存扩展的区别的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-07-25
  • php7和php5的详细对比

    这篇文章主要介绍了php7和php5详细对比,对此感兴趣的同学,可以自己研究下...2021-04-19
  • 浅析PHP7新功能及语法变化总结

    这篇文章主要介绍了浅析PHP7新功能及语法变化总结的相关资料,需要的朋友可以参考下...2016-06-24
  • yum命令安装php7和相关扩展

    本文给大家简单总结了一下在Linux中使用yum命令安装PHP7和其他相关扩展的方法,有需要的小伙伴可以参考下...2016-07-25
  • 最新版本PHP 7 vs HHVM 多角度比较

    PHP 7 是 PHP 社区对 HHVM 的回应。PHP 7 发布的预览版本号称比之前的 PHP 5 的性能要提升100%。不过,PHP 还有一个竞争对手 HHVM (HipHop Virtual Machine) 一个运行 PHP 代码的虚拟工具。二者直接的比较正在升温,那么让我们来看一下他们直接的性能对比吧...2016-02-18
  • jQuery解决浏览器兼容性问题案例分析

    这篇文章主要介绍了jQuery解决浏览器兼容性问题的方法,结合实例形式分析了针对不同浏览器的click事件响应兼容性问题,需要的朋友可以参考下...2016-04-18
  • Windows下编译PHP和memcache扩展教程

    这篇文章主要介绍了windows下编译php扩展memcache教程,本文对想在Windows下手动编译php及其扩展memcache特别有用,需要的朋友可以参考下...2016-01-27
  • php7 安装yar 生成docker镜像

    这篇文章主要介绍了php7 安装yar 生成docker镜像,需要的朋友可以参考下...2017-05-21
  • 变量在 PHP7 内部的实现(一)

    这篇文章主要介绍了变量在 PHP7 内部的实现(一)的相关资料,需要的朋友可以参考下...2015-12-24
  • PHP7多线程搭建教程

    这篇文章主要介绍了PHP7多线程搭建教程,需要的朋友可以参考下...2017-04-26
  • php安装dblib扩展,连接mssql的具体步骤

    下面小编就为大家带来一篇php安装dblib扩展,连接mssql的具体步骤。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-03-12
  • 浅谈PHP7中的一些小技巧

    PHP7显著提高了整体性能。实际上主要的特性有null合并运算符或返回类型声明。如果你不知道它们,那么你应该去查看PHP文档。这里有一些很少人知道的、可能有用的特性。...2021-05-30
  • 详解JS中Array对象扩展与String对象扩展

    这篇文章主要介绍了详解JS中Array对象扩展与String对象扩展的相关资料,需要的朋友可以参考下...2016-01-08
  • 让你的PHP7更快之Hugepage用法分析

    这篇文章主要介绍了让你的PHP7更快之Hugepage用法,较为详细的分析了php7中Hugepage的功能与具体的设置技巧,需要的朋友可以参考下...2016-06-12
  • PHP7之Mongodb API使用详解

    这篇文章主要介绍了PHP7之Mongodb API使用详解的相关资料,需要的朋友可以参考下...2015-12-28
  • Yii框架扩展CGridView增加导出CSV功能的方法

    这篇文章主要介绍了Yii框架扩展CGridView增加导出CSV功能的方法,结合实例形式较为详细的分析了Yii框架扩展组件实现导出CSV格式数据的具体步骤与相关操作技巧,需要的朋友可以参考下...2017-05-26
  • MAC利用brew命令安装PHP7环境的方法

    brew 又叫Homebrew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件, 只需要一个命令, 非常方便brew类似ubuntu系统下的apt-get的功能,下面我们来...2016-11-25