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__ 常量也标记当前文件本身,跟直接写的有什么不同吗?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2
leo

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

8年前 评论

已经理解了,感谢

8年前 评论

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