在单个文件中使用类的作曲家自动加载

时间:2014-08-18 08:43:19

标签: php namespaces composer-php autoload

我正在尝试使用一个使用命名空间的库,但是会自动生成一部分代码,因此它们会在一个文件中生成多个类。

我们使用composer,我尝试在psr-4中添加名称空间定义,如此

"name\space\preffix\": "folder/where/the/file/is"

但是只有一个文件包含自动加载中的所有类都找不到类,我想,它会搜索与您尝试加载的类名相同的文件。有没有办法让作曲家自动加载知道这种情况并使用自动加载类?

2 个答案:

答案 0 :(得分:9)

除了PSR-4(或PSR-0)之外,还有其他两个选项:

  1. classmap - 这将扫描包含的所有类的目录或文件,并将结果放入文件中的PHP数组中。这需要在对正在扫描的文件进行更改时转储自动装带器。
  2. files - 只要包含Composer自动加载器,就会包含所提及的文件。
  3. 因此,你可以使用自动生成的类添加文件,使用classmap自动加载器进行扫描,这将在第一次使用其中的任何类时加载该文件,或者您可以将其添加到自动加载文件中,无论是否正在使用这些课程,都将被包括在内。

    如果考虑性能,除非类的数量巨大且类中的代码量很小,否则首选替代方案。在类图中包含大量的小类可能比首先加载它们的开销更大。

    在这些类中有足够的代码,并且它们并不总是被使用,NOT总是加载它们所节省的数量或内存可能会更快。

    如有疑问:测量它。并考虑将类拆分为单个文件,如果性能损失太大,则使用PSR-4。

答案 1 :(得分:1)

PSR4 spec说:

  

终止类名对应于以.php结尾的文件名。文件名必须与终止类名称的大小写匹配。

由于自动生成的代码不兼容PSR4,因此无法通过PSR4自动加载器自动加载。我会修复生成类的代码,或者使用require_once ..(第一个是优先的。

相关问题