🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
php实现类文件自动载入有两种办法: * 魔术方法:__autoload(); * SPL标准库提供的spl_autoload_register(); ### **__autoload()** __autoload()是php中的一个魔术方法,在代码中当调用不存在的类的时候会自动调用。 在开发过程中可以使用include或者require函数来引入需要调用的类文件,但是如果需要调用的类很多的时候,对应的include或者require也会很多,会造成代码冗余,而且每次执行都要加载这些文件,会白白占用内存,其次当删除了某个类文件时,也要对应的修改include或者require语句。 使用__autoload()魔术方法来代替include或者require语句,则可以避免大量的代码冗余,也可以提高执行效率。 在 Test.php文件中我们调用 类Test1 和 类Test2,由于我们没有显式的引用类文件,那么系统就会自动调用 __autoload() 方法。 ``` //Test.php文件 function __autoload($class){ if(file_exists($class.".php")){ require_once($class.".php"); }else{ die("文件不存在!"); } } Test1::test(); Test2::test(); ``` __autoload()的缺点: 1. 一个文件中只允许有一个__autoload(),当引入的项目中有其他__autoload()时,则会发生冲突。 2. 当项目中的类根据不同的用处放在不同的文件夹中,此时要分别调用对应的类,会十分困难。 ### **spl_autoload_register()** 该函数可以注册任意数量的自动加载器,当使用未被定义的类和接口时自动去加载。 ``` //Test.php文件 function my_autoload1($class){ if(file_exists("classes/".$class.".php")){ require_once("classes/".$class.".php"); }else{ die("文件不存在!"); } } function my_autoload2($class){ if(file_exists("core/".$class.".php")){ require_once("core/".$class.".php"); }else{ die("文件不存在!"); } } //将加载函数注册到PHP中 spl_autoload_register("my_autoload1"); spl_autoload_register("my_autoload2"); Test1::test(); Test2::test(); ```