PHP 设计模式二 类自动载入

「这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战

课程背景

  • 最近完成一个项目 对于代码分层有了一丢丢了解 但是架构设计合理性上存在问题
  • 万物看本质基本功硬 底层知识扎实才能写出更优质的代码 才能走得更远
  • 作为努力奔跑的程序员 又一次的去温习 思考 设计模式等基础的php知识
  • 因为掘金粑粑有奖励,所以把学习的笔记整理记录并分享了出来。

正文开始

当php的项目越来越大文件越来越多的时候,那样如果需要使用到某些类就需要在顶部写一堆的 require引入语句,如果删除某一个类文件,那别的文件找不到这个文件就会报一个致命错误。这种方式很难手动去维护,所以需要一个自动加载类的方法,也就是实现类的自动载入。

1 初期的实现方法 image.png 初期的方法是通过魔术方法实现的,但是这种方式在多个文件中还是会存在方法名重复的问题。

image.png 所以我们现在都是使用 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规范

猜你喜欢

转载自juejin.im/post/7033569918939299847