《PHP實(shí)例:PHP擴(kuò)展遷移為PHP7擴(kuò)展兼容性問題記錄》要點(diǎn):
本文介紹了PHP實(shí)例:PHP擴(kuò)展遷移為PHP7擴(kuò)展兼容性問題記錄,希望對您有用。如果有疑問,可以聯(lián)系我們。
PHP學(xué)習(xí)PHP7擴(kuò)展編寫的時(shí)候,提供的一些內(nèi)核辦法和之前的PHP之前的版本并不能完全兼容.有不少辦法參數(shù)做了調(diào)整.下面是在遷移過程中遇到的一些問題.記錄下來,避免大家再踩坑.
PHP學(xué)習(xí)add_assoc_stringl
PHP學(xué)習(xí)辦法參數(shù)改為四個(gè).
PHP學(xué)習(xí)add_assoc_stringl(parray, key, value, value_len);
PHP學(xué)習(xí)遷移的時(shí)候,只要把最后一個(gè)參數(shù)刪除即可.
PHP學(xué)習(xí)add_assoc_string
PHP學(xué)習(xí)辦法參數(shù)從四個(gè)改為了三個(gè).
PHP學(xué)習(xí)add_assoc_stringl(parray, key, value);
PHP學(xué)習(xí)遷移的時(shí)候,只要把最后一個(gè)參數(shù)刪除即可.
PHP學(xué)習(xí)add_next_index_stringl
PHP學(xué)習(xí)辦法參數(shù)從四個(gè)改為了三個(gè).
PHP學(xué)習(xí)add_next_index_stringl(parray, value, value_len);
PHP學(xué)習(xí)遷移的時(shí)候,只要把最后一個(gè)參數(shù)刪除即可.
PHP學(xué)習(xí)add_next_index_string
PHP學(xué)習(xí)辦法參數(shù)從三個(gè)改為了兩個(gè).
PHP學(xué)習(xí)add_next_index_string(parray, value);
PHP學(xué)習(xí)遷移的時(shí)候,只要把最后一個(gè)參數(shù)刪除即可.
PHP學(xué)習(xí)RETURN_STRINGL
PHP學(xué)習(xí)辦法參數(shù)從三個(gè)改為了二個(gè).
PHP學(xué)習(xí)RETURN_STRINGL(value, length);
PHP學(xué)習(xí)遷移的時(shí)候,只要把最后一個(gè)參數(shù)刪除即可.
PHP學(xué)習(xí)錯(cuò)誤:‘INT64_MAX' 在此作用域中尚未聲明
PHP學(xué)習(xí)原因?yàn)樯钊胙芯?在 #include "php.h" 上面加上一行
PHP學(xué)習(xí)
#include <stdint.h>
#ifndef INT64_MAX
# define INT64_MAX INT64_C( 9223372036854775807)
#endif
#ifndef INT64_MIN
# define INT64_MIN (-INT64_C( 9223372036854775807)-1)
#endif
PHP學(xué)習(xí)辦理.
PHP學(xué)習(xí)創(chuàng)建類
PHP學(xué)習(xí)可以參考mysqli擴(kuò)展mysqli.c文件中的 mysqli_objects_new 辦法.
PHP學(xué)習(xí)變量聲明從堆上分配,改為棧上分配.
PHP學(xué)習(xí)如,原先代碼為
PHP學(xué)習(xí)
zval* sarray_l;
ALLOC_INIT_ZVAL(sarray_l);
array_init(sarray_l);
PHP學(xué)習(xí)改為
PHP學(xué)習(xí)
zval sarray_l;
array_init(&sarray_l);
zend_hash_get_current_key_ex
PHP學(xué)習(xí)辦法參數(shù)從六個(gè)改為了四個(gè).
PHP學(xué)習(xí)
ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_ex(const HashTable *ht, zend_string **str_index, zend_ulong *num_index, HashPosition *pos);
PHP學(xué)習(xí)遷移的時(shí)候,只要把第三個(gè)和第五個(gè)參數(shù)刪除即可.
PHP學(xué)習(xí)錯(cuò)誤:‘Z_TYPE_PP' 在此作用域中尚未聲明
PHP學(xué)習(xí)已經(jīng)沒有Z_TYPE_PP宏,只有Z_TYPE 和Z_TYPE_P宏辦法的定義.
PHP學(xué)習(xí)h2錯(cuò)誤:不能從 ‘zend_string*' 轉(zhuǎn)換到 ‘const char*'
PHP學(xué)習(xí)PHP7中對于字符串的處理使用zend_string進(jìn)行存儲(chǔ).如果想把zend_string 轉(zhuǎn)為 const char .需要使用 ZSTR_VAL()宏辦法.代碼如下:
PHP學(xué)習(xí)
zend_string *str;
char *sptr;
.....
sptr = ZSTR_VAL(str);
PHP學(xué)習(xí)錯(cuò)誤:‘IS_BOOL' 在此作用域中尚未聲明
PHP學(xué)習(xí)已經(jīng)沒有IS_BOOL類型.而是分為了IS_TRUE 和 IS_FALSE.
PHP學(xué)習(xí)錯(cuò)誤:‘Z_BVAL' 在此作用域中尚未聲明
PHP學(xué)習(xí)已經(jīng)沒有Z_BVAL宏.但是可以通過類型是否是 IS_TRUE和IS_FALSE來判定.
PHP學(xué)習(xí)如果類型為IS_TRUE,則值為true.如果類型為IS_FALSE則值為false.
PHP學(xué)習(xí)錯(cuò)誤:‘zend_object_store_get_object' 在此作用域中尚未聲明
PHP學(xué)習(xí)增加如下代碼:
PHP學(xué)習(xí)
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)))
PHP學(xué)習(xí)然后把zend_object_store_get_object改為Z_USEROBJ_P即可.
PHP學(xué)習(xí)注意,user_object是你定義的結(jié)構(gòu)體.
PHP學(xué)習(xí)以上所述是針對PHP擴(kuò)展遷移為PHP7擴(kuò)展兼容性問題記錄的相關(guān)敘述,希望對大家有所贊助.
維易PHP培訓(xùn)學(xué)院每天發(fā)布《PHP實(shí)例:PHP擴(kuò)展遷移為PHP7擴(kuò)展兼容性問題記錄》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/7546.html