(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 类的例子: