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

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

您可能感兴趣的文章:ECshop 迁移到 PHP7版本时遇到的兼容性问题

http://www.bkjia.com/PHPjc/1100318.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1100318.htmlTechArticlePHP扩展迁移为PHP7扩展兼容性问题记录,php7兼容性 PHP7扩展编写的时候,提供的一些内核方法和之前的PHP之前的版本并不能完全兼容。有不少...

php扩展兼容,PHP扩展迁移为PHP7扩展兼容性问题记录,php7兼容性_PHP教程相关推荐

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

    PHP7扩展编写的时候,提供的一些内核方法和之前的PHP之前的版本并不能完全兼容.有不少方法参数做了调整.下面是在迁移过程中遇到的一些问题.记录下来,避免大家再踩坑. add_assoc_string ...

  2. php5项目迁移到php7,php5扩展迁移php7扩展

    记录一下PHP5扩展升级到PHP7扩展的一些点,覆盖十分不全,只是自己在工作中的遇到项目的一些改动. 1, zend_hash_get_current_data_ex php5 定义:1ZEND_AP ...

  3. php7 扩展 性能测试,php7简单性能测试

    (一) 一个简单的测试 看看php7跑多快(就不罗列电脑配置了,因为环境是一样的) 1 测试代码: /** * test.php ; compare php5.6.7 with php7.0.0alp ...

  4. linux php7扩展查看,linux安装PHP7以及扩展

    Linux下安装PHP7 事先升级gcc4.8,然后安装PHP7,安装步骤参考:CentOS安装PHP7 1.Linux下编译的php没有php.ini 解决办法:从源代码目录中复制php.ini-d ...

  5. php7不支持mysql扩展了么_php7不支持mysql扩展需要改成mysqli扩展

    最近升级php7发现不支持mysql扩展,需要改成用mysqli扩展 看代码class Db{ private $username = ''; private $password = ''; priv ...

  6. php获取字符串扩展,PHP7扩展开发之字符串处理

    标签: 本文和大家分享的主要是PHP7扩展开发中字符串的处理相关知识,希望通过本文的分享能帮助大家更好的学习php. 这次,我们来看看字符串在PHP扩展里面如何处理. 示例代码如下: $len = s ...

  7. ubuntu php7 memcache,linux上安装php7 memcache扩展

    php7安装memcache扩展需要memcache  php7的分支  否则安装会失败 php7的memcache扩展安装,真的很让人心碎! 下面则是php7的扩展memcache安装了. 用之前的 ...

  8. php7.2.7curl扩展,如何使用PHP 7安装ext-curl扩展?

    如何使用PHP 7安装ext-curl扩展? 我使用这个repo安装了PHP 7,但是当我尝试运行composer install时,它给出了这个错误: [包]需要ext-curl * - > ...

  9. php7扩展开发教程,Linux下PHP7扩展开发入门教程1:扩展开发流程

    本文将会基于PHP7开发一个最简单的扩展,随便取个名learn_ext,编译生成一个learn_ext.so文件,最终调用可以在php中调用learn_ext扩展中的函数来输出一个hello worl ...

最新文章

  1. 科普丨让机器看见世界,这背后的技术是什么?
  2. const 与 static readonly 的区别
  3. 使用 Linux 子系统部署 Node、Gradle 项目的构建工具
  4. 飞桨 第一课 传统图像识别是怎么做的+Aistudio python数据可视化2020.3.31;2020.4.2补
  5. linux下编辑aacc.sh脚本命令,Shell命令实战详解
  6. SpringMVC一例 是否需要重定向
  7. Strategy(策略)--对象行为型模式
  8. python数字类型怎么学,python的数字类型学习之数据类型
  9. LeetCode 700. 二叉搜索树中的搜索
  10. python 强制结束线程_在python中实现强制关闭线程的示例
  11. 合并果子(洛谷-P1090)
  12. 最长单词(信息学奥赛一本通-T1149)
  13. 统计数字字符和空格 (15 分)
  14. “打击式教育”盛行?数据分析剖析“中式父母”的“打压式教育”
  15. vue实现对数据的增删改查(CURD)
  16. EOS.IO技术学习
  17. java 生日 计算_java根据生日计算当前年龄,精确到月
  18. UVALive5461 UVA615 POJ1308 Is It A Tree?(解法二)【废除!!!】
  19. 数据命脉:未来将性命攸关
  20. web前端开发(一)—HTML基础

热门文章

  1. 如何做好SOC的一点点体会
  2. 零基础Java学习之初始化块
  3. matplotlib画图中文显示
  4. 逻辑回归(使用多项式特征)
  5. SpringCloud入门[转]
  6. 一句话懂什么是JS闭包
  7. Django集成Markdown编辑器【附源码】
  8. springboot 在配置文件写参数注入到类中
  9. python 基础学习3-函数
  10. js中变量和jsp中java代码中变量互相访问解决方案