从PHP5迁移到PHP7扩展需要哪些改动?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

exinnet 2016-01-19 10:38:18 6377

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

分享到
取消 提交回答
全部回答(3)
  • exinnet
    2019-07-17 18:25:19
    已采纳

    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记录

    1 0
  • lucky99
    2019-07-17 18:25:20

    这个有点复杂,感觉一楼说的很专业。

    0 0
  • 哈哈理由
    2019-07-17 18:25:19
    太深奥了
    0 0
添加回答
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

推荐文章