类的自动加载
-
应用场景:开发人员开发程序时,为了方便类的管理,通常都会按一个类写一个类文件,就会存在各种各样的类文件,在引入时,不得不把所有类文件全部require,这样会增加程序负担,占用内存,且后期维护不方便。使用类的自动加载机制,可以按需加载类文件。
-
类文件的命名规范:
- 一个类要单独定义成一个类文件
- 类文件主名字,要与类名一致
- 类文件扩展名,建议要以“.class.php”结尾
-
类自定义加载函数:spl_autoload_register();
- 注意:PHP<7版本 使用__autoload()实现类自动加载,PHP>=7使用spl_autoload_register()实现类自动加载
- 调用时机:
- 使用new关键字创建不存在的类的对象时,自动调用
- 当使用静态化方式访问一个不存在的类时,自动调用
- 当继承一个不存在的类时,自动调用
- 当实现一个不存在的接口时,自动调用
-
语法格式
- 描述:把该函数注册到SPL(标准PHP库)的_autoload函数队列中,如果该队列中的函数尚未激活,则激活它们。它实际上创建了autoload函数的队列,按定义时的顺序逐个执行。
- 语法:
boolean spl_autoload_register([callbasck $autoload_function])
- 参数:$autoload_function 欲注册的自动加载的函数,可以是匿名函数,也可以是字符串的函数名称。
-
使用有名函数方法自动加载类
<?php //使用类自动加载函数,注册自动加载规则 spl_autoload_register('autoload_rule'); function autoload_rule($className){ //该函数中会接收new Student()的类名 , //可以根据类目组装required文件的路径,实现动态加载需求类 $classPath ='./Lib/'.$className.'.class.php'; if(file_exists($classPath)){ require_once($classPath); }else{ die("{$classPath}未找类文件"); } } //当new一个不存在的类时,就激活spl_autoload_register()函数,把类目传入autoload_rule函数中进行之定义的规则进行处理 $student = new Student(); ?>
-
使用匿名函数方法自动加载类
<?php //使用匿名函数方法的进行自动加载类 spl_autoload_register(function($className){ $classPath ='./Lib/'.$className.'.class.php'; if(file_exists($classPath)){ require_once($classPath); }else{ die("{$classPath}未找类文件"); } }); $student = new Student(); ?>