background image

PHP

 

     

   

    autoload

 

     

机制的实现解析

 

 

(1) autoload 机制概述

在使用

PHP 的 OO 模式开发系统时,通常大家习惯上将每个类的实现都存放在一个单独的

文件里,这样会很容易实现对类进行复用,同时将来维护时也很便利。这也是

OO 设计的基

本思想之一。在

PHP5 之前,如果需要使用一个类,只需要直接使用 include/require 将其包

含进来即可。下面是一个实际的例子:

CODE:
/* Person.class.php */
<?php
class Person {
  var $name, $age;
  
  function __construct ($name, $age)
  {
   $this->name = $name;
   $this->age = $age;
  }
}
?>

CODE:

/* no_autoload.php */
<?php
require_once ("Person.class.php");

$person = new Person("Altair", 6);
var_dump ($person);
?>在这个例子中,no-autoload.php 文件需要使用 Person 类,它使用了 require_once 将其包含,
然后就可以直接使用

Person 类来实例化一个对象。

但随着项目规模的不断扩大,使用这种方式会带来一些隐含的问题:如果一个

PHP 文件需

要使用很多其它类,那么就需要很多的

require/include 语句,这样有可能会造成遗漏或者包

含进不必要的类文件。如果大量的文件都需要使用其它的类,那么要保证每个文件都包含正
确的类文件肯定是一个噩梦。

PHP5 为这个问题提供了一个解决方案,这就是类的自动装载(autoload)机制。autoload 机制
可以使得

PHP 程序有可能在使用类时才自动包含类文件,而不是一开始就将所有的类文件

include 进来,这种机制也称为 lazy loading。

下面是使用

autoload 机制加载 Person 类的例子: