PHP擴充套件遷移 注意事項

2021-07-23 21:23:12 字數 2429 閱讀 2581

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;

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)

/* /* }}} */

#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...