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

PHP7扩展开发之hello word

白话PHP7扩展开发之创建对象
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( )
#endif
#ifndef INT64_MIN
# define INT64_MIN (-INT64_C( )-)
#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扩展迁移为兼容PHP7记录的更多相关文章

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

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

  2. ie6,ie7,ie8 css bug兼容解决记录

    ie6,ie7,ie8 css bug兼容解决记录 转载自:ie6,ie7,ie8 css bug兼容解决记录 - 前端开发 断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面 ...

  3. Oracle数据迁移至HBase操作记录

    Oracle数据迁移至HBase操作记录 @(HBase) 近期需要把Oracle数据库中的十几张表T级别的数据迁移至HBase中,过程中遇到了许多苦难和疑惑,在此记录一下希望能帮到一些有同样需求的兄 ...

  4. YII2.0.12兼容PHP7.2版本升级

    YII2.0.12兼容PHP7.2版本升级 报错信息: FastCGI sent in stderr: "PHP message: PHP Fatal error:  Cannot use ...

  5. [PHP] Phalcon应用升级PHP7记录

    升级主要有 php7, phalcon, extension 这三个方面工作. [php7] 我选择从 git 中源码包安装,下面是主要安装步骤: git clone -b php- https:// ...

  6. ie兼容问题记录

    工作中遇到的ie网站兼容性问题  头疼.......... 以下为从网上搜索学习的整理兼容性方法 用于自己记录 #兼容问题 ##css hack: https://blog.csdn.net/fres ...

  7. Django项目的创建与介绍.应用的创建与介绍.启动项目.pycharm创建启动项目.生命周期.三件套.静态文件.请求及数据.配置Mysql完成数据迁移.单表ORM记录的增删改查

    一.Django项目的创建与介绍 ''' 安装Django #在cmd中输入pip3 #出现这个错误Fatal error in launcher: Unable to create process ...

  8. 如何在PHP7中扩展mysql,先安装php7.2。后安装mysql

    相对与PHP5,PHP7的最大变化之一是移除了mysql扩展,推荐使用mysqli或者pdo_mysql,实际上在PHP5.5开始,PHP就着手开始准备弃用mysql扩展,如果你使用mysql扩展,可 ...

  9. Dom兼容问题记录汇总

    DOM方法兼容表   Chrome FireFox IE6 IE7 IE8 IE9 IE10 innerText 支持 不支持(改成了textContent) 支持 支持 支持 支持 支持 inner ...

随机推荐

  1. 09-排序3 Insertion or Heap Sort

    和前一题差不多,把归并排序换成了堆排序.要点还是每一次排序进行判断 开始犯了个错误 堆排序该用origin2 结果一直在排序origin ,误导了半天以为是逻辑错误...一直在检查逻辑 建立最大堆 排 ...

  2. 第八章 管理类型(In .net4.5) 之 加强封装

    1. 概述 本章内容包括 访问控制符.属性 和 显式接口实现. 2. 主要内容 2.1 访问控制符 封装的核心是隐藏信息.访问控制符用来实现类型成员的访问控制. C#的访问控制符有:public, i ...

  3. public、private、protected 与 默认 等访问修饰符

    1)public(公共的):被public修饰的属性和方法可以被所有类访问. 2)private(私有的):被private修饰的属性和方法只能在改类的内部使用. 3)protected(受保护的): ...

  4. 刀哥多线程全局队列gcd-09-global_queue

    全局队列 是系统为了方便程序员开发提供的,其工作表现与并发队列一致 全局队列 & 并发队列的区别 全局队列 没有名称 无论 MRC & ARC 都不需要考虑释放 日常开发中,建议使用& ...

  5. oracle 配置 oem

    1.启动命令是[oracle@yoon ~]$ cd $ORACLE_HOME/bin [oracle@yoon ~]$ ./emctl start dbconsole 停止命令是[oracle@yo ...

  6. 有关GIT

    今天上班,发现没什么事情. 就看了一些博客,发现有个不错的东西,分享一下. 参考:http://www.liaoxuefeng.com/wiki/0013739516305929606dd183612 ...

  7. 使用Apriori算法和FP-growth算法进行关联分析

    系列文章:<机器学习实战>学习笔记 最近看了<机器学习实战>中的第11章(使用Apriori算法进行关联分析)和第12章(使用FP-growth算法来高效发现频繁项集).正如章 ...

  8. Swift Tips - Array 类型

    在开发中,数组这个概念我们应该很熟悉了,Objective-C 中为我们提供了 NSArray 作为数组的实现.大家应该对很熟悉了.而在 Swift 中,为我们提供了它自己对于数组的实现,也是这里我们 ...

  9. (转)redis 学习笔记(1)-编译、启动、停止

    redis 学习笔记(1)-编译.启动.停止   一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先 ...

  10. [转]ubuntu(12.04)下, 命令 ,内核 源代码的获取

    [转]ubuntu(12.04)下, 命令 ,内核 源代码的获取 http://blog.chinaunix.net/uid-18905703-id-3446099.html 1.命令:例如:要查看l ...