1.常用的通用功能已經(jīng)封裝好了,在如zen_API.h 頭文件中,不用費(fèi)力查看內(nèi)部細(xì)節(jié),浪費(fèi)時間。(參考:Extending and Embedding PHP 的附錄A) 2.在terminal中運(yùn)行測試程序,可以看到擴(kuò)展的內(nèi)部 " /> 国产在线播放91,久久国产精品麻豆AV影视,国产99视频在线观看

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP擴(kuò)展編寫點(diǎn)滴 技巧收集

紅色部分是我的注釋。
更多信息參看:

1.常用的通用功能已經(jīng)封裝好了,在如zen_API.h 頭文件中,不用費(fèi)力查看內(nèi)部細(xì)節(jié),浪費(fèi)時間。(參考:Extending and Embedding php 的附錄A)
2.在terminal中運(yùn)行測試程序,可以看到擴(kuò)展的內(nèi)部錯誤輸出,這一點(diǎn)對于解決內(nèi)存泄漏問題尤其重要。(編譯一個debug 的 lib)
3.開發(fā)過程中修改Makefile中的“CFLAGS = -g -O2”,去掉優(yōu)化選項(xiàng),增加-Wall和-pedantic,便于調(diào)試和顯示編譯警告;
4.某zval*,但其strval非拷貝的,不可用zval_ptr_dtor(zval**),要用efree(void*)。
5.terminal中的$_SERVER['PWD']有值,但是無法通過zend_getenv()取得,原因應(yīng)該是該值無意義或不可靠。
6.調(diào)用“導(dǎo)出函數(shù)”,可利用INTERNAL_FUNCTION_PARAM_PASSTHRU傳參;聲明的非導(dǎo)出函數(shù)可通過INTERNAL_FUNCTION_PARAM使用“導(dǎo)出函數(shù)”的參數(shù)。
7.注意:RETURN_TYPE用在選擇分之和循環(huán)等處時,最好置于花括號中,
或者不用分號,因?yàn)椋?define RETURN_BOOL(b) { RETVAL_BOOL(b); return; }。
8.如果函數(shù)的參數(shù)是引用的,且非標(biāo)量,要先析構(gòu),以防內(nèi)存泄露。
9.拋出異常前最好判斷EG(exception)中是否已經(jīng)存在異常,否則會造成內(nèi)存泄露。
10.當(dāng)Web服務(wù)器API是ISAPI (IIS)的時候,zend_getenv函數(shù)是不起作用的。
11.向zend_stack_push()傳入數(shù)據(jù)指針,實(shí)際存儲(copy)的是該指針指向的數(shù)據(jù),換句話說,傳入的應(yīng)該是要存儲的數(shù)據(jù)的指針。
ZEND_API int zend_stack_push(zend_stack *stack, void *element, int size);
ZEND_API int zend_stack_top(zend_stack *stack, void **element);
其中,size == sizeof(*element);
類似地,zend_hash也是如此,比較zend_hash_update和zend_hash_find。
12.使用add_assoc_zval(HashTable*, const char*, zval*)存儲的是zval*,而非zval,因此,
存儲用戶傳入的參數(shù)時候,要先拷貝一份新的zval,否則會發(fā)生不可預(yù)料的事情。
13.zval_dtor(zval*)釋放變量及其內(nèi)部的引用內(nèi)存,zval_ptr_dtor(zval**)先檢查refcount
再決定是否調(diào)用zval_dtor(zval*),zval_copy_dtor(zval*)僅執(zhí)行深層的拷貝,即只拷貝
起內(nèi)部引用的內(nèi)存,而不拷貝zval;

14.如使用VC編譯win的動態(tài)鏈接庫,而且代碼中調(diào)用了zend函數(shù),如zend_getenv,在zend.h中定義為:



extern "C" {
extern ZEND_API char *(*zend_getenv)(char *name, size_t name_len TSRMLS_DC);
}
需要引入該函數(shù),如要使用ZEND_API,需要事先取消LIBZEND_EXPORTS(包括VC“設(shè)置”中的預(yù)處理定義),或者使用ZEND_DLIMPORT,
ZEND_DLIMPORT char *(*zend_getenv)(char *name, size_t name_len TSRMLS_DC);
下面取自:zend_config.w32.h
復(fù)制代碼 代碼如下:
#ifdef LIBZEND_EXPORTS
# define ZEND_API __declspec(dllexport)
#else
# define ZEND_API __declspec(dllimport)
#endif
#define ZEND_DLEXPORT __declspec(dllexport)
#define ZEND_DLIMPORT __declspec(dllimport)

executor_globals_id也需要作如下聲明:
ZEND_DLIMPORT int executor_globals_id;
(這個比較有用,如果你要手工編譯某些擴(kuò)展的時候,比如我在編譯sqlite3這個擴(kuò)展的時候,就遇到這個問題。)

php技術(shù)PHP擴(kuò)展編寫點(diǎn)滴 技巧收集,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲色欲国产AV精品综合 | 簧片在线免费观看 | 日本久久高清视频 | 成人性视频全过程 | 亚洲欧美精品无码一区二在线 | 国产精品高清在线观看93 | 在线 国产 欧美 专区 | 999人在线精品播放视频 | 欧美一区二区VA毛片视频 | 最近的2019中文字幕国语完整版 | 精品国产90后在线观看 | 内射少妇三洞齐开 | 美女撒尿无遮挡免费中国 | 寂寞夜晚视频高清观看免费 | 亚洲欭美日韩颜射在线二 | 国产AV国片精品无套内谢无码 | 久草在线精彩免费视频 | 青青草 久久久 | 精品国产品国语在线不卡丶 | 国产人妻人伦精品98 | 国产在线中文字幕 | 国内精品久久久久久西瓜色吧 | 99久在线国内在线播放免费观看 | 秋霞电影午夜伦午夜 | 浪小辉军警服务员VIDEOS | 高清大胆欧美videossexo | 果冻传媒我的女老板 | 伊人久久精品中文字幕 | 99热在线播放 | 小s现场抛胸挤奶 | 99久久全国免费久久爱 | 色影音先锋av资源网 | WWW国产亚洲精品久久麻豆 | 亚洲AV国产国产久青草 | 亚洲欧美日韩一级特黄在线 | 国精产品一区二区三区四区糖心 | 亚洲国产区中文在线观看 | np高h肉文| 一一本之道高清手机在线观看 | 日本亚欧热亚洲乱色视频 | 夜夜国产亚洲视频香蕉 |