PHP中spl_autoload_register()和__autoload()區(qū)別分析
關(guān)于spl_autoload_register()和__autoload(),相信大多數(shù)都會(huì)選擇前者了? 看兩者的用法:
//__autoload用法
function __autoload($classname)
{
$filename = "./class/".$classname.".class.php";
if (is_file($filename))
{
include $filename;
}
}
//spl_autoload_register用法
spl_autoload_register('load_class');
function load_class($classname)
{
$filename = "./class/".$classname.".class.php";
if (is_file($filename))
{
include $filename;
}
}
使用spl_autoload_register()的好處是不可言喻的:
(1)自動(dòng)加載對(duì)象更加方便,很多框架都是這樣做的:
class ClassAutoloader {
public function __construct() {
spl_autoload_register(array($this, 'loader'));
}
private function loader($className) {
echo 'Trying to load ', $className, ' via ', __METHOD__, "()\n";
include $className . '.php';
}
}
$autoloader = new ClassAutoloader();
$obj = new Class1();
$obj = new Class2();
(2)你要知道__autoload()函數(shù)只能存在一次啊,spl_autoload_register()當(dāng)然能注冊(cè)多個(gè)函數(shù)
function a () {
include 'a.php';
}
function b () {
include 'b.php';
}
spl_autoload_register('a');
spl_autoload_register('b');
(3)SPL函數(shù)很豐富,提供了更多功能,如spl_autoload_unregister()注銷已經(jīng)注冊(cè)的函數(shù)、spl_autoload_functions()返回所有已經(jīng)注冊(cè)的函數(shù)等。
詳見(jiàn)PHP參考手冊(cè):關(guān)于SPL函數(shù)列表.
注意:
如果在你的程序中已經(jīng)實(shí)現(xiàn)了__autoload函數(shù),它必須顯式注冊(cè)到__autoload棧中。因?yàn)?
spl_autoload_register()函數(shù)會(huì)將Zend Engine中的__autoload函數(shù)取代為spl_autoload() 或 spl_autoload_call()
/**
*__autoload 方法在 spl_autoload_register 后會(huì)失效,因?yàn)?autoload_func 函數(shù)指針已指向 spl_autoload 方法
* 可以通過(guò)下面的方法來(lái)把 _autoload 方法加入 autoload_functions list
*/
spl_autoload_register( '__autoload' );
- PHP中spl_autoload_register函數(shù)的用法總結(jié)
- PHP函數(shù)spl_autoload_register()用法和__autoload()介紹
- PHP spl_autoload_register實(shí)現(xiàn)自動(dòng)加載研究
- PHP中__autoload和Smarty沖突的簡(jiǎn)單解決方法
- thinkphp autoload 命名空間自定義 namespace
- php中spl_autoload詳解
- PHP之a(chǎn)utoload運(yùn)行機(jī)制實(shí)例分析
- PHP中spl_autoload_register()函數(shù)用法實(shí)例詳解
相關(guān)文章
php設(shè)計(jì)模式 Factory(工廠模式)
定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定將哪一個(gè)類實(shí)例化,使用一個(gè)類的實(shí)例化延遲到其子類2011-06-06
PHP數(shù)據(jù)庫(kù)操作之基于Mysqli的數(shù)據(jù)庫(kù)操作類庫(kù)
Mysqli 是什么,我這里也不進(jìn)行描述了。因?yàn)榫W(wǎng)上關(guān)于 Mysqli 的教程數(shù)不勝數(shù),我這里為大家介紹一款基于 Mysqli 的操作數(shù)據(jù)庫(kù)類(M.class.php)2014-04-04
php+Ajax無(wú)刷新驗(yàn)證用戶名操作實(shí)例詳解
這篇文章主要介紹了php+Ajax無(wú)刷新驗(yàn)證用戶名操作,簡(jiǎn)單介紹了ajax的原理并結(jié)合實(shí)例形式分析了php結(jié)合ajax無(wú)刷新驗(yàn)證用戶名相關(guān)操作技巧,需要的朋友可以參考下2019-03-03
php 數(shù)據(jù)庫(kù)字段復(fù)用的基本原理與示例
php 數(shù)據(jù)庫(kù)字段復(fù)用的基本原理與示例,需要的朋友可以參考下。2011-07-07
php實(shí)現(xiàn)在服務(wù)器端調(diào)整圖片大小的方法
這篇文章主要介紹了php實(shí)現(xiàn)在服務(wù)器端調(diào)整圖片大小的方法,實(shí)例分析了imageResizer與loadimage操作圖片的相關(guān)技巧,需要的朋友可以參考下2015-06-06
PHP下通過(guò)系統(tǒng)信號(hào)量加鎖方式獲取遞增序列ID
前一陣子,設(shè)計(jì)LAJP時(shí)需要在PHP中生成唯一ID,看似小菜一碟卻著實(shí)讓我為難了,在Java中一個(gè)同步方法即可搞定的事,但在PHP中卻沒(méi)有好的解決思路。2009-09-09
PHP常見(jiàn)過(guò)waf webshell以及最簡(jiǎn)單的檢測(cè)方法
這篇文章主要給大家介紹了關(guān)于PHP常見(jiàn)過(guò)waf webshell以及最簡(jiǎn)單的檢測(cè)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用PHP具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
使用WAMP搭建PHP本地開(kāi)發(fā)環(huán)境
這篇文章主要為大家詳細(xì)介紹了使用WAMP搭建PHP本地開(kāi)發(fā)環(huán)境的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05

