作曲家自动加载背后的逻辑是什么?它如何将命名空间映射到特定文件,为什么我们总是需要使用该类的命名空间?
答案 0 :(得分:2)
- composer autoloading背后的逻辑是什么?
- 如何将命名空间映射到特定文件?
- 为什么我们总是需要使用该类的命名空间?
醇>
回答:
3.在许多编程语言 namespace 中,用于分隔具有相同名称但层次结构不同的类 - 最好的例子是Eloquent Builder和Query Builder。好吧,把它当作硬盘中的某种'文件路径',你可以说,目录b.txt
和dir-a
中的文件名为dir-b
但他们保留了自己的内容吗?无论如何,阅读the php documentation regarding namespace
(1,2)。 Composer读取composer.json
以检查哪个路径代表命名空间,列出其中的每个 php文件,并将它们存储到autoload_*.php
中(如果你问我文件的位置,它就在里面你的/vendor/composer/
名称开头有autoload
的所有内容.Laravel - 或者更确切地说Composer - 知道如何通过这些文件加载它们以及它们的位置。如果你检查文件你有一个想法。在你需要记住的Composer自动加载中的唯一约定是单个文件的单个文件,它的类名应该与文件名完全相同(没有php部分 - 是的,这与PSR-*
)
PS。如果我错了,请纠正我。
答案 1 :(得分:1)
假设您单独使用autoload
,这意味着它不包含范围(namespace
)。
这意味着如果您在供应商文件夹中安装第三方依赖项(具有相同名称的类)(很可能会存在),则会发生冲突,导致应用程序出现致命错误。
Composer类自动加载功能也符合PSR-4 Standards。
Composer如何映射文件?
这在composer.json
文件中指定,例如:
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
App
将是命名空间,src
将是文件夹
它对单元测试也很有用,您可以仅针对开发环境执行以下操作:
"autoload-dev":{
"psr-4" : {
"App\\Test\\": "tests/"
}
}