「这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战」
课程背景
- 最近完成一个项目 对于代码分层有了一丢丢了解 但是架构设计合理性上存在问题
万物看本质
基本功硬 底层知识扎实才能写出更优质的代码 才能走得更远- 作为努力奔跑的程序员 又一次的去温习 思考 设计模式等基础的php知识
- 因为掘金粑粑有奖励,所以把学习的笔记整理记录并分享了出来。
正文开始
当php的项目越来越大文件越来越多的时候,那样如果需要使用到某些类就需要在顶部写一堆的 require引入语句,如果删除某一个类文件,那别的文件找不到这个文件就会报一个致命错误。这种方式很难手动去维护,所以需要一个自动加载类的方法,也就是实现类的自动载入。
1 初期的实现方法 初期的方法是通过魔术方法实现的,但是这种方式在多个文件中还是会存在方法名重复的问题。
所以我们现在都是使用 spl_autoload_register()方法
2 定义好 spl_autoload_register的回调函数,当类找不到的时候会自动执行 spl_autoload_register中的回调函数
刚才犯了个比较蠢的问题是,注册了自动载入,但是回调并不执行。那是因为spl_autoload_register是针对的类找不到,当执行其他命名空间中定义的方法的时候,是肯定不会出发这个自动载入的。这里切记切记。
test1.php文件中 定义好类
<?php
namespace t1;
class Test1{
static function hello(){
echo __FILE__;
}
}
复制代码
index.php文件中
<?php
spl_autoload_register(function($class){
echo "这是执行了自动载入".$class;
// echo './' . $class . '.php';
// require './' . $class . '.php';
});
\t1\Test1::hello(); //指定命名空间
复制代码
因为遵循了PSR-0规范,所以 $class中携带了命名空间等内容 下一章节会介绍这个内容,并解释什么是PSR-0规范