PHP命名空间语法:大括号与没有大括号的区别是什么?

Flo*_*rle 13 php namespaces

PHP提供了两种声明命名空间的语法.您可以使用没有大括号或大括号的命名空间,如下所示.

没有大括号

namespace foo/bar;
class Any{}
Run Code Online (Sandbox Code Playgroud)

有大括号

namespace foo/bar {
   class Any{}
}
Run Code Online (Sandbox Code Playgroud)

这两种使用命名空间的方式的功能或行为是否存在差异,或者它们是否以相同的方式工作/运行?

lla*_*ato 9

每种情况都有不同的原因,PHP网站上有一个很好的例子.

您在命名空间周围使用大括号的原因是,如果一个文件中有多个命名空间,或者您需要在与命名空间中包含的代码相同的文件中包含全局非命名空间代码.

此外,如果一个文件中有多个名称空间,则也允许使用非括号内语法.

根据php指南,不建议这样做,如果可以的话,只需将它保存到每个文件的一个命名空间即可.

  • "如果一个文件中有多个名称空间"=>非括号内语法也允许这样做. (2认同)

Ja͢*_*͢ck 5

在第一个变体中,每个文件只能使用一个命名空间,而第二个允许使用多个命名空间.它们可以互换使用,并且可以在单个文件中多次出现以定义多个名称空间.在这种情况下,使用花括号的唯一原因是:

namespace {
    // code is in global scope
}
Run Code Online (Sandbox Code Playgroud)

除了上面的示例之外,在单个文件中具有多个名称空间的潜在缺点是使用目录和文件名来解析要加载的类的自动加载器; 因此,除非您将多个脚本文件合并为一个,否则不建议每个文件具有多个命名空间.