background image

$a

 = 

new

 A();

 
但是有一个问题就是,假如我们的 index.php 需要包含的不只是类 A,而是需要很多类,
这样子就必须写很多行

require

语句,有时候也会让人觉得不爽。

不过在 php5 之后的版本,我们就不再需要这样做了。在 php5 中,试图使用尚未定义的类
时会自动调用 autoload 函数,所以我们可以通过编写__autoload 函数来让 php 自动加载类,
而不必写一个长长的包含文件列表。
例如在上面那个例子中,index.php 可以这样写:
代码如下:
 
<?php

function

 __autoload(

$class

)

{

$file

 = 

$class

 . '.php';

if

 (

is_file

(

$file

)) {

require_once

(

$file

);

}
}

$a

 = 

new

 A();

 
当然上面只是最简单的示范,__autoload 只是去 include_path 寻找类文件并加载,我们可
以根据自己的需要定义__autoload 加载类的规则。
此外,假如我们不想自动加载的时候调用__autoload,而是调用我们自己的函数(或者类
方法),我们可以使用 spl_autoload_register 来注册我们自己的 autoload 函数。它的函数原
型如下:
bool spl_autoload_register ( [callback 

$autoload_function

] )

我们继续改写上面那个例子:
代码如下:
 
<?php

function

 loader(

$class

)

{

$file

 = 

$class

 . '.php';

if

 (

is_file

(

$file

)) {

require_once

(

$file

);

}
}
spl_autoload_register('loader');

$a

 = 

new

 A();

 
这样子也是可以正常运行的,这时候 php 在寻找类的时候就没有调用__autoload 而是调用
我们自己定义的函数 loader 了。同样的道理,下面这种写法也是可以的:
代码如下: