php自动加载_PHP教程

WBOY
풀어 주다: 2016-07-14 10:07:50
원래의
789명이 탐색했습니다.

php中有两种自动加载机制函数

 
[php]  
__autoload();  
  
spl_autoload_register();  
1. __autoload()
 
可以将需要使用类的时候把文件加载到程序中
 
[php]  
  
function __autoload($className) {  
  
    if (file_exists($className . '.php')) {  
  
        include $className . '.php';//可细化  
  
    } else {  
  
        echo $className . '.php is not exists.';  
  
        exit;  
  
    }  
  
}  
  
  
  
$indexController = new IndexController();  
在程序的运行过程中,php会检测这个$className类是否已经加载,如果没有加载会去执行__autoload(),再去加载$className这个类。在实例化类的对象、访问类中的静态变量和方法等都会去检测类是否已经加载,是否有定义__autoload()函数,如果都没有就会报错。
 
在复杂点的系统中,用__autoload()来实现类的自动加载可能会很复杂。
 
2. spl_autoload_register()
 
[php]  
spl_autoload_register();  
$index = new Index();  
spl_autoload_register()函数中没有参数,则会自动默认实现void spl_autoload ( string $class_name [,string $file_extensions ] )函数,默认支持.php和.ini
 
[php]  
function load1($className) {  
    //include  
}  
function load2($className) {  
    //include  
}  
  
spl_autoload_register('load1');//注册到spl_autoload_functions  
spl_autoload_register('load2');  
  
$index = new Index();  
会先通过load1去加载类,如果load1中没有,再通过load2去加载,如果还有以次类推。
 
实现一个自动加载方法比较多,这举例一个
 
 
 
[php]  
class autoloader {  
  
    public static $loader;  
  
    public static function init()  
    {  
        if (self::$loader == NULL)  
            self::$loader = new self();  
  
        return self::$loader;  
    }  
  
    public function __construct()  
    {  
        spl_autoload_register(array($this,'model'));  
        spl_autoload_register(array($this,'helper'));  
        spl_autoload_register(array($this,'controller'));  
        spl_autoload_register(array($this,'library'));  
    }  
  
    public function library($class)  
    {  
        set_include_path(get_include_path().PATH_SEPARATOR.'/lib/');  
        spl_autoload_extensions('.library.php');  
        spl_autoload($class);  
    }  
  
    public function controller($class)  
    {  
        $class = preg_replace('/_controller$/ui','',$class);  
          
        set_include_path(get_include_path().PATH_SEPARATOR.'/controller/');  
        spl_autoload_extensions('.controller.php');  
        spl_autoload($class);  
    }  
  
    public function model($class)  
    {  
        $class = preg_replace('/_model$/ui','',$class);  
          
        set_include_path(get_include_path().PATH_SEPARATOR.'/model/');  
        spl_autoload_extensions('.model.php');  
        spl_autoload($class);  
    }  
  
    public function helper($class)  
    {  
        $class = preg_replace('/_helper$/ui','',$class);  
  
        set_include_path(get_include_path().PATH_SEPARATOR.'/helper/');  
        spl_autoload_extensions('.helper.php');  
        spl_autoload($class);  
    }  
  
}  
  
//call  
autoloader::init();  
?>  
也可以根据自己的需要来设计实现

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/477831.htmlTechArticlephp中有两种自动加载机制函数 [php] __autoload(); spl_autoload_register(); 1. __autoload() 可以将需要使用类的时候把文件加载到程序中 [php] ?php function...
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!