首頁 > php教程 > php手册 > PHP類別的自動載入機制

PHP類別的自動載入機制

WBOY
發布: 2016-09-19 08:54:59
原創
1058 人瀏覽過

php的自動載入:

在php5以前,我們要用某個類或類的方法,那必須include或require,之後才能使用,每次用一個類,都需要寫一條include,麻煩

php作者想簡單點,最好能引用一個類別時,如果當前沒有include進來,系統能自動去找到該類,自動引進~

於是:__autoload()函數應運而生。

通常放在應用程式入口類別裡面,例如discuz中,放在class_core.php中。

先講淺顯的例子:

第一種情況:檔案A.php中內容如下

class A{

  public function __construct(){

         echo 'fff';

  }

}

?>

文件C.php 內容如下:

function __autoload($class)   
{   
$file = $class . '.php';   

}   

$a = new A(); //這邊會自動呼叫__autoload,引入A.php檔

?>

第二種情況:

有時我希望能自訂autoload,並且希望取一個更酷的名字loader,則C.php改為如下: function loader($class)

{
$file = $class . '.php';
if (is_file($file)) {
require_once($file);
}
}
}

spl_autoload_register('loader'); //註冊一個自動載入方法,覆寫原有的__autoload

$a = new A();

?>

第三種情況:我希望高大上一點,用一個類別來管理自動加載

class Loader   
{   
public static function loadClass($class)   
{   once($file);   
}   
}   
}   

spl_autoload_register(array('Loader', 'loadClass'));   

$a = new A();

$a = new A();
?>
目前為最佳形式。

通常我們將spl_autoload_register(*)放在入口腳本,也就是一開始就引用進來。比如下面discuz的做法。

if(function_exist('spl_autoload_register')){

  spl_autoload_register(array('core','autoload'));  //如果是php5以上,存在註冊函數,則註冊自己寫的core類別中的autoload為自動載入函數

}else{

  function __autoload($class){         //如果不是,則重寫php原生函數__autoload函數,讓其呼叫自己的core中函數。

    return core::autoload($class);

  }

}

這段丟在入口文件最前面,自然是極好的~

轉載:http://www.cnblogs.com/zhongyuan/p/3583201.html

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板