加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 03:08:21 所属栏目:PHP教程 来源:网络整理
导读:《PHP实例:PHP扩展迁移为PHP7扩展兼容性问题记录》要点: 本文介绍了PHP实例:PHP扩展迁移为PHP7扩展兼容性问题记录,希望对您有用。如果有疑问,可以联系我们。 PHP学习 PHP7扩展编写的时候,提供的一些内核办法和之前的PHP之前的版本并不能完全兼容.有不少

《PHP实例:PHP扩展迁移为PHP7扩展兼容性问题记录》要点:
本文介绍了PHP实例:PHP扩展迁移为PHP7扩展兼容性问题记录,希望对您有用。如果有疑问,可以联系我们。

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

add_assoc_stringl

办法参数改为四个.

add_assoc_stringl(parray,key,value,value_len);

迁移的时候,只要把最后一个参数删除即可.

add_assoc_string

办法参数从四个改为了三个.

add_assoc_stringl(parray,value);

迁移的时候,只要把最后一个参数删除即可.

add_next_index_stringl

办法参数从四个改为了三个.

add_next_index_stringl(parray,只要把最后一个参数删除即可.

add_next_index_string

办法参数从三个改为了两个.

add_next_index_string(parray,只要把最后一个参数删除即可.

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

编程之家培训学院每天发布《PHP实例:PHP扩展迁移为PHP7扩展兼容性问题记录》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读