假设我们有一个php文件需要引用5个不同的类文件,可能会写出下面这样的代码:

require_once ("A.php");
require_once ("B.php");
require_once ("C.php");
require_once ("D.php");
require_once ("E.php");

$a = new A();
$b = new B();
$c = new C();
$d = new D();
$e = new E();

随着类的增多,文件之间依赖关系的复杂化,这里的require也会越来越多,程序员在编写代码的时候很容易忘记或者漏掉某个require,而且在每个php文件中都大量充斥着这种代码,看着真心累。 在PHP5中为这个问题提供了一个解决方案,这就是类的自动加载机制(autoload),这个机制可以使得程序在真正使用某个类时才开始加载这个类,所以也可以叫做类的延迟加载(lazy loading)。PHP提供了两种方法来达到这个目的:

  1. __autoload方法
  2. SPL的autoload机制

使用__autoload方法,可以将类名和所需要的类文件建立一个映射关系,一般情况是让类名和文件名保持一致,让PHP自动的去加载这些类。一个典型的__autoload方法如下:

function __autoload($classname) {
    require_once ($classname . ".php");
}
 
$a = new A();
$b = new B();
$c = new C();
$d = new D();
$e = new E();

参考

  1. php _autoload自动加载类与机制分析
  2. PHP自动加载__autoload的工作机制
  3. PHP的类自动加载机制
  4. PHP SPL,被遗落的宝石
扫描二维码,在手机上阅读!