开发者社区> 问答> 正文

从PHP5迁移到PHP7扩展需要哪些改动?

已解决

从PHP5迁移到PHP7扩展需要哪些改动?

展开
收起
exinnet 2016-01-19 10:38:18 8776 0
3 条回答
写回答
取消 提交回答
  • 淘宝技术专家
    采纳回答

    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);

    ps:由于提交,提示有违禁词,不得不删除了一部分。更多内容查看
    PHP扩展迁移为兼容PHP7记录

    2019-07-17 18:25:19
    赞同 1 展开评论 打赏
  • 这个有点复杂,感觉一楼说的很专业。

    2019-07-17 18:25:20
    赞同 展开评论 打赏
  • 太深奥了
    2019-07-17 18:25:19
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
PHP安全开发:从白帽角度做安全 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载