首页 > 编程笔记 > PHP笔记 阅读:86

PHP spl_autoload_register()函数的用法(附带实例)

早期 PHP 版本中,使用类文件自动加载的机制是将自定义的类放在同名的 .php 文件中。然后,在一个 .php 文件中定义 __autoload() 函数,其中定义了如何引用类代码文件。页面中,需要引用定义了 __autoload() 函数的文件,使用某个类时,会根据 __autoload() 函数中定义的逻辑自动载入相应的代码文件。

请注意,在 PHP 7.2 及更新的版本中,__autoload() 函数已被弃用,如果是开发或维护早期 PHP 项目,可以使用 __autoload() 函数,但在 PHP 5.1 及更新的版本中,应使用本节介绍的 spl_autoload_register() 函数。

spl_autoload_register() 函数用于替代 __autoload() 函数,功能是注册自动载入文件的函数。spl_autoload_register() 函数的定义如下:
spl_autoload_register([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]]) : bool
其中:
下面的代码在 /demo/cf.php 文件中调用了 spl_autoload_register() 函数,其中注册的函数同样指定在网站 /demo 目录中查找代码文件。
<?php
spl_autoload_register(function ($classname) {
    require_once $_SERVER["DOCUMENT_ROOT"]."/demo/{$classname}.php";
});
?>
接下来在 /index.php 测试此函数的功能:
<?php
require_once $_SERVER["DOCUMENT_ROOT"]."/demo/cf.php";

$c1 = new tC1();
$c1->m1();
?>
代码中,首先引用了 /demo/cf.php,当代码中使用 tC1 类时,同样会自动引用 /demo/tC1.php 文件。

使用 spl_autoload_register() 函数时,也可以单独定义一个函数,然后将其名称作为 spl_autoload_register() 函数的第一个参数,如下面的代码:
<?php
//
function reg_class ($classname) {
    require_once $_SERVER["DOCUMENT_ROOT"]."/demo/{$classname}.php";
}
//
spl_autoload_register("reg_class");
?>
下面的代码同样可以自动引用 tC1 类的代码文件:
<?php
require_once $_SERVER["DOCUMENT_ROOT"]."/demo/cf2.php";

$c1 = new tC1();
$c1->m1();
?>
代码执行结果为:

相关文章