为什么我们需要使用 Laravel 中的'use namespace;'来要求上课?



composer自动加载背后的逻辑是什么?它是如何将名称空间映射到特定文件的?为什么我们总是需要使用该类的名称空间?

  1. composer自动加载背后的逻辑是什么
  2. 它是如何将名称空间映射到特定文件的
  3. 为什么我们总是需要使用该类的名称空间

答案:3.在许多编程语言中,命名空间用于分离具有相同名称但不同层次结构的类-最好的例子是Eloquent Builder和Query Builder。好吧,把它想象成某种"文件路径">,就像在你的硬盘中,你在目录dir-adir-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/"
}
}

相关内容

  • 没有找到相关文章

最新更新