为什么我们需要使用'use namespace;'在Laravel需要上课?

时间:2017-01-03 00:01:09

标签: laravel composer-php

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

2 个答案:

答案 0 :(得分:2)

  
      
  1. composer autoloading背后的逻辑是什么?
  2.   
  3. 如何将命名空间映射到特定文件?
  4.   
  5. 为什么我们总是需要使用该类的命名空间?
  6.   

回答: 3.在许多编程语言 namespace 中,用于分隔具有相同名称但层次结构不同的类 - 最好的例子是Eloquent BuilderQuery Builder。好吧,把它当作硬盘中的某种'文件路径',你可以说,目录b.txtdir-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/"
    }
  }