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
#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;錯誤:『is_bool' 在此作用域中尚未宣告char *sptr;
.....
sptr = zstr_val(str);
已經沒有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)
/* /* }}} */
#define z_userobj_p(zv) hsf_fetch_object(z_obj_p((zv)))
然後把zend_object_store_get_object改為z_userobj_p即可。
注意,user_object是你定義的結構體。
以上所述是針對php擴充套件遷移為php7擴充套件相容性問題記錄的相關敘述,希望對大家有所幫助。
SQL資料庫向ORACLE遷移注意事項
1.oracle 中沒有bit型別,使用number 1 代替。2.decimal money int型別,同樣使用 number 代替。3.字串相加用 作為運算子。4.中文字串加n作為標識。5.sql server 中的isnull,使用 nvl代替。6.left right 函式使用 subst...
PHP 注意事項
1.arr array a b true in array c arr 返回true,儘管陣列裡並沒有 c 這一項。因為,c true。要想讓其返回正確的結果,應使用 in array c arr,true 2.bool 0 返回false bool 返回true 3.var 1 a var未必是陣...
CodeFirst遷移注意點
context建構函式 不檢查 migrationhistory 取消當資料庫模型發生改變時刪除當前資料庫重建新資料庫的設定。database.setinitializer null 重新建立資料庫 database.setinitializer new dropcreatedatabaseifmo...