博客列表 >自动加载,遵循PSR-4规范(0213)

自动加载,遵循PSR-4规范(0213)

暴风战斧
暴风战斧原创
2020年03月21日 08:12:26600浏览
编程思路

主要是去理解“需要自动加载的文件路径必须与该文件中的代码的命名空间一一对应”

作业总结

这次主要在自动加载器文件上绕晕了,可能理解角度不对吧,反复看了好多遍,脑子思考了好多遍,磕磕绊绊把效果弄出来,才恍然大悟,其实自动加载器实现的是,传入一个类名得到这个类的绝对路径,然后加上扩展名‘.php’,就实现了:use一个类就能require到这个类文件。从不懂到明白,思维链条好长,明白了就四个字完事:自动加载

代码演示

QQ截图20200320233114.png

1、自动加载的类

实例

<?php

namespace food\fruit;

class Apple
{
    public static function myApple()
    {
        return __CLASS__ . ':自动加载成功了~';
    }
}

die(Apple::myApple());

运行实例 »

点击 "运行实例" 按钮查看在线实例

2、自动加载文件

实例

<?php

namespace food\fruit;

spl_autoload_register(function ($class) {
    // 设置项目前缀
    $prefix = 'Food\a\\';

    // 设置具有项目前缀的类名所对应的类的基目录
    $base_dir = __DIR__ . '/food/';

    // 去掉项目前缀,获取真实的类名称
    $realClassName = substr($class, strlen($prefix));

    // 兼容分隔符
    $path = str_replace('\\', DIRECTORY_SEPARATOR, $realClassName);

    // 加上及目录和php的后缀
    $file = $base_dir . $realClassName . '.php';

    file_exists($file) ? require $file : die('文件不存在,加载失败!');
});

运行实例 »

点击 "运行实例" 按钮查看在线实例

3、实现自动加载

实例

<?php

namespace food\fruit;

use Food\a\Apple;

require 'autoload.php';

Apple::abc();

运行实例 »

点击 "运行实例" 按钮查看在线实例

QQ截图20200320233309.png

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议