当php7
扩展写,内核的某些
方法和以前的PHP以前的版本不完全兼容。有
调整参数的方法很多,以下是一些遇到的问题,在迁移过程中保留下来,以避免任何踩坑。
add_assoc_stringl
方法参数更改为四。
add_assoc_stringl(粒子阵列,关键值,value_len);
迁移时,只需
删除最后一个参数。
add_assoc_string
方法参数从四更改为三。
add_assoc_stringl(粒子阵列,关键值);
迁移时,只需删除最后一个参数。
add_next_index_stringl
方法参数从四更改为三。
add_next_index_stringl(粒子阵列,价值,value_len);
迁移时,只需删除最后一个参数。
add_next_index_string
方法参数从三改为2。
add_next_index_string(粒子阵列,值);
迁移时,只需删除最后一个参数。
return_stringl
方法参数从三改为2。
return_stringl(值长);
迁移时,只需删除最后一个参数。
错误:int64_max没有在这个范围内声明
原因是深入研究。添加一行#包括PHP。H
#包括
#则int64_max
#定义int64_max int64_c(922337203685477580)
# endif
#则int64_min
#定义int64_min(- int64_c(922337203685477580)- 1)
# endif
解决u3002
创建类
你可以
参考的mysqli在mysqli扩展mysqli_objects_new C
文件的方法。
变量声明从堆中分配,并更改为堆栈。
例如,原始代码是
* sarray_l zval;
alloc_init_zval(sarray_l);
array_init(sarray_l);
相反
sarray_l zval;
array_init(sarray_l);
zend_hash_get_current_key_ex
方法参数从六更改为四。
zend_api zend_fastcall zend_hash_get_current_key_ex(const int哈希表* HT,zend_string ** str_index,zend_ulong * num_index,hashposition);
迁移时,只需删除第三和第五个参数。
错误:z_type_pp没有在这个范围内声明
没有z_type_pp宏,唯一的z_type和z_type_p宏定义方法。
H2的错误:不能被
转换从zend_string *到const char *
在php7字符串
处理使用zend_string.if你想把zend_string const char*存储。你需要使用zstr_val()宏法,代码如下:
zend_string * STR;
char *果实;
的…
果实= zstr_val(STR);
错误:is_bool没有在这个范围内声明
没有is_bool型。它分为is_true和is_false。
错误:z_bval没有在这个范围内声明
没有z_bval宏。但它可以判断是否是is_true和is_false。
如果
类型是is_true,价值是真实的,如果是is_false类型,该值为false。
错误:zend_object_store_get_object没有在这个范围内声明
添加以下代码:
静态内联hsf_object * hsf_fetch_object(zend_object * OBJ){ / / *
返回(user_object *)((char *)(obj)- XtOffsetOf(user_object,STD));
}
#定义z_userobj_p(ZV)hsf_fetch_object(z_obj_p((((ZV)))
然后改变zend_object_store_get_object到z_userobj_p。
注意,user_object是你定义的结构。
上面的描述是有关PHP扩展迁移到php7扩展
兼容性问题的记录,希望对你有帮助。