Composer类加载器中的`$ prepend`参数

时间:2016-10-14 13:43:25

标签: php composer-php

我正在使用Composer中的加载器。

/** @var \Composer\Autoload\ClassLoader $loader */
$loader = require __DIR__ . '/vendor/dependencies/autoload.php';
$loader->add('MyAppNamespace', __DIR__, true);

正如您所看到的,加载器有3个参数,这些参数在此处记录:https://getcomposer.org/apidoc/1.0.0/Composer/Autoload/ClassLoader.html#method_add

我对第3个布尔参数$prepend的作用非常困惑。上面的链接表示$prepend表示以下内容:Whether to prepend the directories。但是我不知道这意味着什么。

有人可以解释$prepend参数对示例的作用。

谢谢!

1 个答案:

答案 0 :(得分:2)

查看composer code

$first = $prefix[0];
if (!isset($this->prefixesPsr0[$first][$prefix])) {
    $this->prefixesPsr0[$first][$prefix] = (array) $paths;
    return;
}
if ($prepend) {
    $this->prefixesPsr0[$first][$prefix] = array_merge(
        (array) $paths,
        $this->prefixesPsr0[$first][$prefix]
    );
} else {
    $this->prefixesPsr0[$first][$prefix] = array_merge(
        $this->prefixesPsr0[$first][$prefix],
        (array) $paths
    );
}

如您所见,$prepend确定您(__DIR__)提供的路径是否会被添加或附加。通常它并不重要,因为每个命名空间只有一个路径,但是你可以拥有更多,例如使用此机制来覆盖您自己的实现随供应商lib提供的某些类。