一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

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

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

php5后,引入了__autoload這個攔截器方法,可以自動對class文件進(jìn)行包含引用,通常我們會這么寫:
復(fù)制代碼 代碼如下:
function __autoload($className) {
include_once $className . '.class.php';
}

$user = new User();

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

在__autoload函數(shù)中拋出的異常不能被catch語句塊捕獲并導(dǎo)致致命錯誤。

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

當(dāng)你希望使用PEAR風(fēng)格的命名規(guī)則,例如需要引入User/Register.php文件,也可以這么實現(xiàn):
復(fù)制代碼 代碼如下:
//加載我
function __autoload($className) {
$file = str_replace('_', DIRECTORY_SEPARATOR, $className);
include_once $file . 'php';
}
$userRegister = new User_Register();


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

此函數(shù)的功能就是把函數(shù)注冊至SPL的__autoload函數(shù)棧中,并移除系統(tǒng)默認(rèn)的__autoload()函數(shù)。一旦調(diào)用spl_autoload_register()函數(shù),當(dāng)調(diào)用未定義類時,系統(tǒng)會按順序調(diào)用注冊到spl_autoload_register()函數(shù)的所有函數(shù),而不是自動調(diào)用__autoload()函數(shù),下例調(diào)用的是User/Register.php而不是User_Register.class.php
復(fù)制代碼 代碼如下:
//不加載我
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()的時候,我們還可以考慮采用一種更安全的初始化調(diào)用方法,參考如下:
復(fù)制代碼 代碼如下:
//系統(tǒng)默認(rèn)__autoload函數(shù)
function __autoload($className) {
include_once $className . '.class.php';
}
//可供SPL加載的__autoload函數(shù)
function autoload($className) {
$file = str_replace('_', DIRECTORY_SEPARATOR, $className);
include_once $file . '.php';
}
//不小心加載錯了函數(shù)名,同時又把默認(rèn)__autoload機制給取消了…… 主站蜘蛛池模板: 四虎国产精品永久在线播放 | 久久综合九色综合91 | 欧美精品午夜 | 色网站在线观看 | 久久久噜噜噜久久久午夜 | 亚洲三级自拍 | 黄色资源视频 | 亚洲二区在线播放 | 加勒比一本大道香蕉在线视频 | 久久伊人一区二区三区四区 | 国产精品欧美韩国日本久久 | 国产黄频在线观看高清免费 | 日本久久免费大片 | 国产乱码一区二区三区四川人 | 91麻豆久久 | 国产一区二区视频在线观看 | 美女网站视频黄色 | 日本老年人精品久久中文字幕 | 久久这里精品青草免费 | 成人av在线播放 | 91欧美精品综合在线观看 | 亚洲视频在线网站 | 国产人成亚洲第一网站在线播放 | 91久久国产情侣真实对白 | 天天天综合 | 91久久婷婷国产综合精品青草 | 亚洲最大综合网 | 人人洗澡人人洗澡人人 | 国产成人精品区在线观看 | 久久精品免视着国产成人 | 露脸一二三区国语对白 | 欧美成a人免费观看久久 | 久久久久久国产精品mv | 久久精品成人国产午夜 | 亚洲看片网站 | 久久网伊人 | 日韩特黄| 激情四房 | 欧洲精品一区二区三区在线观看 | 精品久久久久久久一区二区手机版 | 色婷婷久久综合中文久久一本 |