Composer 这个做法实在没看懂什么意思。

class ComposerAutoloaderInit524c29ed708f6c4258990603eec263a1
{
    private static $loader;

    public static function loadClassLoader($class)
    {
        if ('Composer\Autoload\ClassLoader' === $class) {
            require __DIR__ . '/ClassLoader.php';
        }
    }

    public static function getLoader()
    {
        if (null !== self::$loader) {
            return self::$loader;
        }

        spl_autoload_register(array('ComposerAutoloaderInit524c29ed708f6c4258990603eec263a1', 'loadClassLoader'), true, true);

        self::$loader = $loader = new \Composer\Autoload\ClassLoader();

        spl_autoload_unregister(array('ComposerAutoloaderInit524c29ed708f6c4258990603eec263a1', 'loadClassLoader'));

就是为何要用一次autoload来引用文件

google一遍唯一靠谱的就找到这个,why-composer-load-classloader-in-this-way

但我实在是没看懂,因为定义和new的时候都是用的FQN,不应该存在类冲突才对。

__DIR__ 常量也标记当前文件本身,跟直接写的有什么不同吗?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 2
leo

其实楼主主要疑惑点在于为何不用require_once吧,根据Seldaek的回答,主要问题出在使用phpunit.phar对一个使用composer的项目做单测的时候,phpunit.phar本身打包了composer的ClassLoader类,而你的项目中也包含ClassLoader类,在执行单测时你项目里的ComposerAutoloaderInitaaaaaa和phpunit.phar里的ComposerAutoloaderInitbbbbb都会被加载,所以即时用了require_once也是会出现重复定义ClassLoader类的问题。

7年前 评论

已经理解了,感谢

7年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!