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() 函数的定义如下:
下面的代码在 /demo/cf.php 文件中调用了 spl_autoload_register() 函数,其中注册的函数同样指定在网站 /demo 目录中查找代码文件。
使用 spl_autoload_register() 函数时,也可以单独定义一个函数,然后将其名称作为 spl_autoload_register() 函数的第一个参数,如下面的代码:
请注意,在 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其中:
- $autoload_function,定义一个回调函数,其中定义了资源的载入规则。
- $throw,回调函数无法注册时是否抛出错误,默认值为 true。
- $prepend,设置为 true 时,将新注册的回调函数放到资源载入规则队列首位,默认为 false,将回调函数放在载入规则队列末尾。当注册多个函数时,可以通过此参数指定它们的调用顺序。
下面的代码在 /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(); ?>代码执行结果为:
