一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP的autoload自動加載機制使用說明

PHP的autoload自動加載機制使用說明

2019-11-13 12:11php教程網 PHP教程

自PHP5后,引入了__autoload這個攔截器方法,可以自動對class文件進行包含引用,下面看具體的使用方法。

在PHP開發過程中,如果希望從外部引入一個class,通常會使用include和require方法,去把定義這個class的文件包含進來,但是這樣可能會使得在引用文件的新腳本中,存在大量的include或require方法調用,如果一時疏忽遺漏則會產生錯誤,使得代碼難以維護。

自PHP5后,引入了__autoload這個攔截器方法,可以自動對class文件進行包含引用,通常我們會這么寫: 

復制代碼代碼如下:


function __autoload($className) { 
include_once $className . '.class.php'; 


$user = new User(); 


當PHP引擎試圖實例化一個未知類的操作時,會調用__autoload()方法,在PHP出錯失敗前有了最后一個機會加載所需的類。因此,上面的這段代碼執行時,PHP引擎實際上替我們自動執行了一次__autoload方法,將User.class.php這個文件包含進來。 

在__autoload函數中拋出的異常不能被catch語句塊捕獲并導致致命錯誤。 

如果使用 PHP的CLI交互模式時,自動加載機制將不會執行。 

當你希望使用PEAR風格的命名規則,例如需要引入User/Register.php文件,也可以這么實現: 

復制代碼代碼如下:


//加載我 
function __autoload($className) { 
$file = str_replace('_', DIRECTORY_SEPARATOR, $className); 
include_once $file . 'php'; 

$userRegister = new User_Register(); 



這種方法雖然方便,但是在一個大型應用中如果引入多個類庫的時候,可能會因為不同類庫的autoload機制而產生一些莫名其妙的問題。在PHP5引入SPL標準庫后,我們又多了一種新的解決方案,spl_autoload_register()函數。 

此函數的功能就是把函數注冊至SPL的__autoload函數棧中,并移除系統默認的__autoload()函數。一旦調用spl_autoload_register()函數,當調用未定義類時,系統會按順序調用注冊到spl_autoload_register()函數的所有函數,而不是自動調用__autoload()函數,下例調用的是User/Register.php而不是User_Register.class.php: 

復制代碼代碼如下:


//不加載我 
function __autoload($className) { 
include_once $className . '.class.php'; 

//加載我 
function autoload($className) { 
$file = str_replace('/', DIRECTORY_SEPARATOR, $className); 
include_once $file . '.php'; 

//開始加載 
spl_autoload_register('autoload'); 
$userRegister = new User_Register(); 



在使用spl_autoload_register()的時候,我們還可以考慮采用一種更安全的初始化調用方法,參考如下: 

復制代碼代碼如下:


//系統默認__autoload函數 
function __autoload($className) { 
include_once $className . '.class.php'; 

//可供SPL加載的__autoload函數 
function autoload($className) { 
$file = str_replace('_', DIRECTORY_SEPARATOR, $className); 
include_once $file . '.php'; 

//不小心加載錯了函數名,同時又把默認__autoload機制給取消了……囧 
spl_autoload_register('_autoload', false); 
//容錯機制 
if(false === spl_autoload_functions()) { 
if(function_exists('__autoload')) { 
spl_autoload_register('__autoload', false); 


奇技淫巧:在Unix/Linux環境下,如果你有多個規模較小的類,為了管理方便,都寫在一個php文件中的時候,可以通過以ln -s命令做軟鏈接的方式快速分發成多個不同類名的拷貝,再通過autoload機制進行加載。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品亚洲午夜久久久久 | 久草大 | 国产欧美另类久久精品91 | 午夜国产 | 99久久精品国产免看国产一区 | 日韩有码| 国产图片综合区 | 午夜精品在线视频 | 草草草在线 | 免费成年网 | 国产在线观看福利片 | 亚洲天堂一区二区在线观看 | 欧美在线一二三区 | 爽好舒服把腿张小说 | fc2免费人成为视频 eeuss18影院www国产 | 午夜一级影院 | 精灵之森高清在线 | 国产一区二区不卡 | 日韩精品成人免费观看 | 黑人巨大vs北条麻妃在线 | 国产黄频在线观看高清免费 | 古装一级毛片 | 女同变态 中文字幕 | 黑人巨茎大战欧美白妇 | 四虎永久免费地址在线观看 | 91国语精品自产拍在线观看一 | 日本老妇成熟 | 99视频在线免费观看 | 四虎影视库永久在线地址 | 欧洲网色偷偷亚洲男人的天堂 | 五月天婷婷精品免费视频 | 大桥未久一区二区 | 色图大全 | 午夜影院免费入口 | 99午夜高清在线视频在观看 | 日本精品欧洲www | 免费看又黄又爽又猛的视频软件- | 欧美日韩免费一区二区在线观看 | 114毛片免费观看网站 | 国产亚洲精品美女久久久 | 国产成人在线影院 |