参数解释:

autoload_function:要注册的自动加载的函数,可以是回调函数办法,也可以是某个类的方法。

throw:此参数设置了 autoload_function 无法成功注册时, spl_autoload_register()是否抛出非常。

php的自动加载机制PHP主动加载文件机制进修 Python

prepend:如果是 true,spl_autoload_register() 会添加函数到行列步队之首,而不是行列步队尾部,当注册多个自定义加载函数时,可以提升优先级。

示例

回调函数办法

spl_autoload_register(function($className) { //自动加载代码}, true, true);

静态类办法

class MyAutoloader { public static function loader($className) { //自动加载代码 }}spl_autoload_register([MyAutoloader::class, 'loader'], true, true);完全示例

假设我们以命名空间前缀作为加载规则,如:PersonModel.php文件位于Model目录,命名空间为Model,命名空间路径要与文件目录保持同等,代码如下:

namespace Model;class PersonModel { public function getName() { return "zhangsan"; }}

自动加载类文件

class MyAutoloader { public static function loader($className) { $path = ''; $className = trim($className, '\\'); if (false !== ($pos = strpos($className, '\\'))) { $path = substr($className, 0, $pos); $className = substr($className, $pos + 1); } require_once "." . DIRECTORY_SEPARATOR . $path . DIRECTORY_SEPARATOR . $className . '.php'; }}spl_autoload_register([MyAutoloader::class, 'loader'], true, true);

主入口文件

//引入自动加载文件require_once "./autoloader.php";//通过自动加载引入类文件$person = new \Model\PersonModel();//正常打印输出echo $person->getName();总结

自动加载须要有统一的命名规则,目前最常用的是按命名空间办法加载,早期没有命名空间时,一样平常按文件名后缀区分文件所在目录,从而实现不同模块文件加载,现在主流框架已经利用composer管理类库,普通用户无需关心这些加载规则,此文章紧张用于学习文件加载事理及流程。