自動加載類

在 PHP 5 中,再也不須要這樣了。能夠定義一個 __autoload() 函數,它會在試圖使用還沒有被定義的類時自動調用。經過調用此函數,腳本引擎在 PHP 出錯失敗前有了最後一個機會加載所需的類。php

Tip函數

spl_autoload_register() 提供了一種更加靈活的方式來實現類的自動加載。所以,再也不建議使用 __autoload() 函數,在之後的版本中它可能被棄用。.net

Note:code

在 5.3.0 版以前,__autoload 函數拋出的異常不能被 catch 語句塊捕獲並會致使一個致命錯誤。從 5.3.0+ 以後,__autoload 函數拋出的異常能夠被 catch 語句塊捕獲,但須要遵循一個條件。若是拋出的是一個自定義異常,那麼必須存在相應的自定義異常類。__autoload 函數能夠遞歸的自動加載自定義異常類。遞歸

Note:ip

自動加載不可用於 PHP 的 CLI 交互模式ci

Note:get

若是類名好比被用於 call_user_func(),則它可能包含一些危險的字符,好比 ../。 建議您在這樣的函數中不要使用用戶的輸入,起碼須要在 __autoload() 時驗證下輸入。io

<?php 
/* 
 * defined function responsible for loading class, 
 * replacing the old __ autoload. 
 * ROOT is constant of the path root of the system 
 */ 
spl_autoload_extensions('.class.php'); 
spl_autoload_register('loadClasses'); 
  function loadClasses($className) 
  {     
     if( file_exists(ROOT_DIR.DS.'controller/'.$className.'.class.php' ) ){ 
         set_include_path(ROOT_DIR.DS.'controller'.DS); 
         spl_autoload($className); 
     } 
     elseif( file_exists('model/'.$className.'.class.php' ) ){ 
         set_include_path(ROOT_DIR.DS.'model'.DS); 
         spl_autoload($className); 
     }elseif( file_exists('view/'.$className.'.class.php' ) ){ 
         set_include_path(ROOT_DIR.DS.'view'.DS); 
         spl_autoload($className    ); 
     }else 
     { 
         set_include_path(ROOT_DIR.DS.'lib'.DS); 
         spl_autoload($className    ); 
     } 
  } 
?>
相關文章
相關標籤/搜索