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