php自動加載類__autoload()的方法

做用:當在程序中須要實例化一個類,恰好這這類又不是在本文件中,則須要用包含函數將外部文件包含進來。可是,當要用的外部類不少後,就會發現用包含函數會顯得十分的繁瑣,這是就能夠用__autoload()全局函數自動加載類。
當在index.php中要使用前面三個類時,就須要寫三個例如include("name.class.php") 這樣的方法,效率會十分低,但若是使用了__autoload()函數就不用這樣麻煩了,只須要寫這樣一個函數方法就能夠了:
在 PHP 5 中,再也不須要這樣了。能夠定義一個 __autoload() 函數,它會在試圖使用還沒有被定義的類時自動調用。經過調用此函數,腳本引擎在 PHP 出錯失敗前有了最後一個機會加載所需的類。
在下例中將經過實例來講明 __autoload() 是如何使用的,首先定義一個類ClassA,文件名爲ClassA.class.php,實例代碼以下:
  • class ClassA{
  • public function funa(){
  • echo "classA loaded successfully!
    ";
  • }
  • }
而後在相同目錄下再定義另外一個類ClassB,文件名爲ClassB.class.php,ClassB繼承ClassA,實例代碼以下:
  • class ClassB extends ClassA {
  • public function funb(){
  • echo "classB also loaded successfully!
    ";
  • }
  • }
  • ?>
最後在與上面兩個文件相同目錄下再定義一個autoload.php(這個文件名隨便取),實例代碼以下:
  • function __autoload($class_name) {
  • require_once ("./".ucfirst($class_name).'.class.php');//ucfirst使類名首字母轉換爲大寫
  • }
  • $obj = new ClassB();
  • $obj->funa();
  • $obj->funb();
  • ?>
運行autoload.php的程序,看結果:
classA loaded successfully!
classB also loaded successfully!
實例:文件夾下有這樣幾個文件:
  • User.class.php;
  • Person.class.php;
  • Message.class.php;
  • index.php;
咱們就能夠這樣操做,代碼以下:
index.php
  • function __autoload($className){ //ucfirst() 將字符串首字母變爲大寫
  • include("ucfirst($className)".class.".php"); }
例如:在index.php文件中實例化User.class.php中的User類,若是不存在則自動調用__autoload()函數,代碼以下:
  • //將類名User做爲參數傳入
  • *************/
  • $user=new User();
  • //經過自動加載類調用User.class.php文件
  • $person=new Person();
  • //經過自動加載類調用Person.class.php文件
  • $Message=new Message();
  • //經過自動加載類調用Message.classphp文件 function="" message="new" person="new" user="new">
相關文章
相關標籤/搜索