一、自动加载类
很多开发者写面向对象的应用程序时对每个类的定义建立一个 PHP 源文件。一个很大的烦恼是不得不在每个脚本开头写一个长长的包含文件列表(每个类一个文件)。
在 PHP 5 中,不再需要这样了。可以定义一个 __autoload() 函数,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。
Tip
spl_autoload_register() 提供了一种更加灵活的方式来实现类的自动加载。
因此,不再建议使用 __autoload() 函数,在以后的版本中它可能被弃用。
二、spl_autoload_register
spl_autoload_register — 注册给定的函数作为 __autoload 的实现
说明
bool spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] )
将函数注册到SPL __autoload函数队列中。如果该队列中的函数尚未激活,则激活它们。
参数
autoload_function :欲注册的自动装载函数。如果没有提供任何参数,则自动注册 autoload 的默认实现函数 spl_autoload() 。
throw :此参数设置了 autoload_function 无法成功注册时, spl_autoload_register() 是否抛出异常。
prepend :如果是 true, spl_autoload_register() 会添加函数到队列之首,而不是队列尾部。
返回值
成功时返回 TRUE , 或者在失败时返回 FALSE
- <?php
- function my_autoloader ( $class ) {
- include 'classes/' . $class . '.class.php' ;
- }
- spl_autoload_register ( 'my_autoloader' );
- // 或者,自 PHP 5.3.0 起可以使用一个匿名函数
- spl_autoload_register (function ( $class ) {
- include 'classes/' . $class . '.class.php' ;
- });
如果未注册,我们实例化一个类刚会报错:如下
- <?php
- namespace Foobar ;
- class Foo {
- static public function test ( $name ) {
- print '[[' . $name . ']]' ;
- }
- }
- spl_autoload_register ( __NAMESPACE__ . '\Foo::test' ); // 自 PHP 5.3.0 起
- new InexistentClass ;
- /**程序结果如下:
- [[Foobar\InexistentClass]]
- Fatal error: Class 'Foobar\InexistentClass' not found
- **/