内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

autoload在PHP中的運行機制是什么-創(chuàng)新互聯(lián)

這篇文章給大家介紹autoload在PHP中的運行機制是什么,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

創(chuàng)新互聯(lián)成立十年來,這條路我們正越走越好,積累了技術與客戶資源,形成了良好的口碑。為客戶提供成都網(wǎng)站設計、網(wǎng)站制作、網(wǎng)站策劃、網(wǎng)頁設計、域名注冊、網(wǎng)絡營銷、VI設計、網(wǎng)站改版、漏洞修補等服務。網(wǎng)站是否美觀、功能強大、用戶體驗好、性價比高、打開快等等,這些對于網(wǎng)站建設都非常重要,創(chuàng)新互聯(lián)通過對建站技術性的掌握、對創(chuàng)意設計的研究為客戶提供一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進步。

php實現(xiàn)autoload有兩種方法:


1、攔截器__autoload()

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

本質上前者還是通過后者實現(xiàn)的。

分析過程,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函數(shù)。其參數(shù)fcall_info, fcall_cache,分別指向兩個重要的結構,zend_fcall_info和zend_fcall_info_cache

zend_call_function主要工作流程如下:

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

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

自動加載方便了面向對象和代碼復用,但是多個類庫不同的__autoload又會導致混亂??梢杂胹pl_autoload解決,將不同開發(fā)者的攔截器函數(shù)都注冊到自動加載函數(shù)的hashtable中。spl實現(xiàn)自動加載的機制是維護一個hashtable,里面存儲有具有自動加載功能的各個函數(shù)。

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

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

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

關于autoload在PHP中的運行機制是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

網(wǎng)站題目:autoload在PHP中的運行機制是什么-創(chuàng)新互聯(lián)
鏈接分享:http://www.rwnh.cn/article12/gdhgc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內鏈、小程序開發(fā)、網(wǎng)站導航網(wǎng)站設計、移動網(wǎng)站建設、品牌網(wǎng)站設計

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設
清苑县| 绵阳市| 陆丰市| 吉安县| 昌乐县| 江口县| 四川省| 萨迦县| 卢龙县| 福州市| 桐城市| 搜索| 客服| 来宾市| 海城市| 辽源市| 平湖市| 汾阳市| 隆德县| 疏勒县| 阳谷县| 和静县| 边坝县| 九龙城区| 昌吉市| 藁城市| 沿河| 绥江县| 洛浦县| 马边| 兴仁县| 钟山县| 平度市| 长宁县| 丹阳市| 克山县| 靖远县| 萨嘎县| 澜沧| 柳州市| 霍山县|