名称空间和使用之间的区别,尤其是在PHP laravel框架中

时间:2018-11-10 21:25:09

标签: php laravel

名称空间和使用之间有什么区别,我无法理解,我认为与'AS'一起使用是为名称空间创建快捷方式

我认为使用不带命名空间的使用必须包含/要求一些东西,但是屏幕截图中的这个示例使我感到困惑

Screenshot from 7:11 https://www.youtube.com/watch?v=sLFNVXY0APk

1 个答案:

答案 0 :(得分:0)

在PHP中,名称空间是一个容器,其中封装了一些“东西”:函数类,接口或特征。这样做是为了避免命名冲突,因为在PHP(或大多数语言)中,您只能一次声明一次类/函数/接口/特征。

例如,您可以有一个名为Users的类和另一个名为MyProject\Users的类,因为第二个类具有一个命名空间,这可以防止与第一个类发生冲突。否则(在没有名称空间的情况下)您想要的将是模棱两可的,因此,如果尝试使用PHP,它将给出一个错误。

使用Use语句可让您使用命名空间,而无需引用整个内容。如果您是在全局或基本命名空间中,那么这两件事大致相等

 new \MyProject\Users();

AND

use MyProject\Users
new Users();

第二个优点是,如果您决定更改名称空间,则只需要在Use语句中更改它,而不是更改名称空间中的每个类调用。除此之外,它的打字量要少得多,而且如果不需要的话,我们的程序员也不喜欢打字。

现在,对于AS关键字,您可以使用它来解决冲突,或仅缩短名称空间,例如:

 use MyProject as M; //now M = MyProject 

 new M\Users(); // MyProject user class
 new Users(); //base namespace user class

这确实与将代码导入PHP的方式无关,但是有一些命名约定(如PSR4)可以根据文件名空间正确放置文件。但这并不会根据您使用Use的方式而改变。一般的“经验法则”是名称空间应与目录结构匹配,这样我们可以利用自动加载器,而不是在开始时包含每个文件。自动加载器仅在需要时加载类文件,正如我所说,这是基于正确命名和命名类和目录结构的基础。

我希望这是有道理的。