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

PHP之autoload運行機制實例分析

本文較為深入的分析了php的autoload運行機制。對于深入理解php運行原理有一定的幫助作用。具體分析如下:

php實現autoload有兩種方法:

1、攔截器__autoload()

2、設置全局變量函數指針autoload_func為指定函數。通常在c擴展中使用

本質上前者還是通過后者實現的。

分析過程,php5.3.6源碼:

=>Zend/zend_vm_def.h  1894行
ZEND_VM_HANDLER(109,ZEND_FETCH_CLASS,...
=>zend_execute_API.c 1526行
zend_class_entry *zend_fetch_class(const char *class_name,...
=>zend_execute_API.c 1564行
if(zend_lookup_class_ex(class_name,class_name_len,...
=>zend_execute_API.c 1039行
ZEND_API int zend_lookup_class_ex(const char *na...
=>zend_execute_API.c 1121行
retval = zend_call_function(&fcall_info, &fcall_cache TSRMLS_CC);
=>zend_execute_API.c 758行
       zend_call_function

顧名思義,zend_call_function的主要功能是調用php函數。其參數fcall_info, fcall_cache,分別指向兩個重要的結構,zend_fcall_info和zend_fcall_info_cache

zend_call_function主要工作流程如下:

如果fcall_cache.function_handler不為NULL,則直接執行 fcall_cache.function_handler指向的函數。
如果 fcall_cache.function_handler為NULL,則嘗試查找函數名為fcall_info.function_name的函 數,如果存在的話,則執行之;
 
現總結如下,autoload機制的主要執行過程為:

(1) 檢查執行器全局變量函數指針autoload_func是否為NULL。
(2) 如果autoload_func不為NULL,則直接執行autoload_func指針指向的函數用來加載類,并不檢查__autoload()函數是否定義。
(3) 如果autoload_func為NULL,則查找系統中是否定義有__autoload()函數。如果沒有定義,則報告錯誤并退出;如果定義了__autoload()函數,則執行__autoload()嘗試加載類,并返回加載結果。

自動加載方便了面向對象和代碼復用,但是多個類庫不同的__autoload又會導致混亂。可以用spl_autoload解決,將不同開發者的攔截器函數都注冊到自動加載函數的hashtable中。spl實現自動加載的機制是維護一個hashtable,里面存儲有具有自動加載功能的各個函數。

當觸發自動加載機制時,zend會在遍歷執行這個hashtable里面的函數,直到成功加載類或加載失敗后返回。
當需要使用自動加載功能時,使用函數spl_autoload_register()或spl_autoload_register('autoloadfuncitonname')
無參的spl_autoload_register()會默認加載spl_autoload()函數,該函數功能有限,只能在inlcude_path中搜索指定擴展名的類庫。

有參的spl_autoload_register()默認不再加載spl_autoload()函數。
可以通過spl_autoload_functions()查看當前自動加載hashtable中的函數,該函數返回一個數組

注意:使用spl_autoload時,系統會忽略攔截器__autoload,除非顯式地使用spl_autoload_register('__autoload')將其加入hashtable

希望本文所述對大家的php程序設計有所幫助

php技術PHP之autoload運行機制實例分析,轉載需保留來源!

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

主站蜘蛛池模板: 亚洲手机在线人成视频 | 2017欧美狠狠色 | 欧美黑人巨大性极品hd欧 | 狠狠色香婷婷久久亚洲精品 | 国产精品日本无码久久一老A | 日本动漫henta videos | 99热这里只有 精品 99热这里只就有精品22 | 久久亚洲AV无码精品午色夜麻豆 | 好想被狂躁A片免费久99 | 娇妻被朋友玩得呻吟在线电影 | 久久精品中文字幕有码日本 | 879影视动漫h免费观看 | 美女隐私黄www视频 美女议员被泄裸照 | 女张腿男人桶羞羞漫画 | 国产AV高清怡春院 | 一本道高清码v京东热 | 皮皮在线精品亚洲 | 国产精品乱码色情一区二区视频 | 国产亚洲精品字幕在线观看 | aaaaaaa一级毛片 | 亚洲高清国产拍精品5g | 欧美巨大xxxx做受孕妇视频 | 欧美亚洲韩日午夜 | 综合精品欧美日韩国产在线 | 优菈的乳液狂飙天堂W98 | 少妇无码吹潮久久精品AV | 精品视频久久久久 | 99视频在线观看视频 | 67194免费入口 | 国家产午夜精品无人区 | 国产午夜视频在线 | 嫩草影院地址一二三 | 亲胸揉胸膜下刺激视频网站APP | 伊人色综合久久大香 | 国产精品资源网站在线观看 | 蜜桃成熟时33D在线嘟嘟网 | 久热人人综合人人九九精品视频 | 三级貂蝉艳史 在线观看 | 欧美三级在线完整版免费 | 亚洲AV无码乱码国产精品品麻豆 | 啊…嗯啊好深男男高h文总受 |