自动加载类

在 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    ); 
     } 
  } 
?>
相关文章
相关标签/搜索