ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 1、为什么需要类的自动加载 很多开发者写面向对象的应用程序时,对每个类的定义,都建立一个独立的 PHP 类文件,方便类文件的统一管理,这无可厚非。但一个很大的烦恼是,不得不在每个脚本开头,写一个长长的包含文件列表(每个类一个文件)。这样一来,就增加了很多负担、占用了很多的内存,对于后期维护也不方便。 ![](https://img.kancloud.cn/d5/e3/d5e35fc83633a5122631e3016f5fa82e_767x216.png) 解决方案:按需要加载类文件,而不是把所有类全部包含进来。 ## 2、类文件的命名规范 * 一个类要单独定义成一个独立的类文件; * 类文件扩展名,要以".class.php"结尾,是一种约定,不是必须的; * 类文件主名,要与类名一致; * 例如:Db.class.php、UserController.class.php、UserModel.class.php ## 3、类的自定义加载函数:spl_autoload_register() PHP7以下版本,使用__autoload()实现类的自动加载; PHP7以上版本,使用spl_autoload_register()实现类的自动加载。 (1)spl_autoload_register()何时调用? 当试图使用未定义的类时spl_autoload_register自动调用,使用一个类有以下几种情况: * 使用new关键字创建不存在类的对象时,spl_autoload_register自动调用;例如:$obj = new Student() * 当使用静态化方式访问一个不存在的类时,spl_autoload_register自动调用,例如:Student::show(); * 当继承一个不存在的类时,spl_autoload_register自动调用,例如:class Stu extends Parent{} * 当实现一个不存在的接口时,spl_autoload_register自动调用,例如:class Stu implements Inter (2)语法格式 * 描述:将函数注册到SPL(标准PHP库)的__autoload函数队列中。如果该队列中的函数尚未激活,则激活它们。它实际上创建了 autoload 函数的队列,按定义时的顺序逐个执行。 * 语法: ``` bool spl_autoload_register ([ callback $autoload_function ] ) ``` * 参数:$autoload_function,欲注册的自动装载函数,可以是匿名函数,也可以是字符串的函数名称。$autoload_function有一个传递过来的类名形参,用于在函数中构建类文件路径。 * 返回:成功时返回 TRUE, 或者在失败时返回 FALSE。 (3)使用普通函数作为参数 ![](https://img.kancloud.cn/9e/60/9e6079337cca5e335527b2f04806787e_1114x662.png) (4)使用匿名函数作为参数 ![](https://img.kancloud.cn/30/20/3020cde35eff040499dd62c6466b76b2_1113x663.png)