Blogger Information
Blog 32
fans 2
comment 2
visits 23317
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
自动加载,遵循PSR-4规范(0213)
暴风战斧
Original
599 people have browsed it
编程思路

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

作业总结

这次主要在自动加载器文件上绕晕了,可能理解角度不对吧,反复看了好多遍,脑子思考了好多遍,磕磕绊绊把效果弄出来,才恍然大悟,其实自动加载器实现的是,传入一个类名得到这个类的绝对路径,然后加上扩展名‘.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

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:use是给一个类起一个别外, 而这个别名恰好又能很好的体现这个类的路径, 于是这个别名又被再次利用起来完成了加载功能, 这就好比你们公司有一个广东员工, 大家叫它小广东, 于是通过这个别名, 就可以判断出他来自哪里, 对不对?
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments