溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

PHP擴(kuò)展遷移為PHP7擴(kuò)展兼容性的參數(shù)調(diào)整

發(fā)布時(shí)間:2021-09-13 17:56:10 來(lái)源:億速云 閱讀:109 作者:chen 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“PHP擴(kuò)展遷移為PHP7擴(kuò)展兼容性的參數(shù)調(diào)整”,在日常操作中,相信很多人在PHP擴(kuò)展遷移為PHP7擴(kuò)展兼容性的參數(shù)調(diào)整問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”P(pán)HP擴(kuò)展遷移為PHP7擴(kuò)展兼容性的參數(shù)調(diào)整”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

add_assoc_stringl

方法參數(shù)改為四個(gè)。

add_assoc_stringl(parray, key, value, value_len);

遷移的時(shí)候,只要把最后一個(gè)參數(shù)刪除即可。

add_assoc_string

方法參數(shù)從四個(gè)改為了三個(gè)。

add_assoc_stringl(parray, key, value);

遷移的時(shí)候,只要把最后一個(gè)參數(shù)刪除即可。

add_next_index_stringl

方法參數(shù)從四個(gè)改為了三個(gè)。

add_next_index_stringl(parray, value, value_len);

遷移的時(shí)候,只要把最后一個(gè)參數(shù)刪除即可。

add_next_index_string

方法參數(shù)從三個(gè)改為了兩個(gè)。

add_next_index_string(parray, value);

遷移的時(shí)候,只要把最后一個(gè)參數(shù)刪除即可。

RETURN_STRINGL

方法參數(shù)從三個(gè)改為了二個(gè)。

RETURN_STRINGL(value, length);

遷移的時(shí)候,只要把最后一個(gè)參數(shù)刪除即可。

錯(cuò)誤:‘INT64_MAX' 在此作用域中尚未聲明

原因?yàn)樯钊胙芯?。?#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

解決。

創(chuàng)建類(lèi)

可以參考mysqli擴(kuò)展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

方法參數(shù)從六個(gè)改為了四個(gè)。

ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_ex(const HashTable *ht, zend_string **str_index, zend_ulong *num_index, HashPosition *pos);

遷移的時(shí)候,只要把第三個(gè)和第五個(gè)參數(shù)刪除即可。

錯(cuò)誤:‘Z_TYPE_PP' 在此作用域中尚未聲明

已經(jīng)沒(méi)有Z_TYPE_PP宏,只有Z_TYPE 和Z_TYPE_P宏方法的定義。

h3錯(cuò)誤:不能從 ‘zend_string*' 轉(zhuǎn)換到 ‘const char*'

PHP7中對(duì)于字符串的處理使用zend_string進(jìn)行存儲(chǔ)。如果想把zend_string 轉(zhuǎn)為 const char 。需要使用 ZSTR_VAL()宏方法。代碼如下:

zend_string *str;
char *sptr;
.....
sptr = ZSTR_VAL(str);

錯(cuò)誤:‘IS_BOOL' 在此作用域中尚未聲明

已經(jīng)沒(méi)有IS_BOOL類(lèi)型。而是分為了IS_TRUE 和 IS_FALSE.

錯(cuò)誤:‘Z_BVAL' 在此作用域中尚未聲明

已經(jīng)沒(méi)有Z_BVAL宏。但是可以通過(guò)類(lèi)型是否是 IS_TRUE和IS_FALSE來(lái)判定。

如果類(lèi)型為IS_TRUE,則值為true。如果類(lèi)型為IS_FALSE則值為false。

錯(cuò)誤:‘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是你定義的結(jié)構(gòu)體。

到此,關(guān)于“PHP擴(kuò)展遷移為PHP7擴(kuò)展兼容性的參數(shù)調(diào)整”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI