PHP的⾃动载⼊类class机制褪黑素或越吃越失眠
php类的⾃动加载
在php5以前,我们要⽤某个类或类的⽅法,那必须include或者require,之后才能使⽤,每次⽤⼀个类,都需要写⼀条include,⿇烦php作者想简单点,最好能引⽤⼀个类时,如果当前没有include进来,系统能⾃动去到该类,⾃动引进~
于是:__autoload()函数应运⽽⽣。
通常放在应⽤程序⼊⼝类⾥⾯,⽐如discuz中,放在class_core.php中。
先讲浅显的例⼦:
第⼀种情况:⽂件A.php中内容如下
<?php
class A{
  public function __construct(){
        echo 'fff';
  }
}
?>
⽂件C.php 中内容如下:
<?php
function __autoload($class)
{
$file = $class . '.php';
if (is_file($file)) {
require_once($file);
}
}
$a = new A(); //这边会⾃动调⽤__autoload,引⼊A.php⽂件
?>
第⼆种情况:有时我希望能⾃定义autoload,并且希望起⼀个更酷的名字loader,则C.php改为如下:
<?php
function loader($class)
{
$file = $class . '.php';
if (is_file($file)) {
邮政储蓄银行个人网上银行require_once($file);
招行信用卡进度查询
}
报名}
spl_autoload_register('loader'); //注册⼀个⾃动加载⽅法,覆盖原有的__autoload
$a = new A();
?>
第三种情况:我希望⾼⼤上⼀点,⽤⼀个类来管理⾃动加载
<?php
class Loader
{
public static function loadClass($class)
{
$file = $class . '.php';
if (is_file($file)) {
require_once($file);
幼儿早操
}
}
}
spl_autoload_register(array('Loader', 'loadClass'));
$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);
  }
}
这段扔在⼊⼝⽂件最前⾯,⾃然是极好的~