14

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

没有大括号

namespace foo/bar;
class Any{}

带大括号

namespace foo/bar {
   class Any{}
}

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

4

4 回答 4

10

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

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

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

根据 php 指南,不建议这样做,如果可以,请将其保留在每个文件的一个命名空间中。

于 2013-03-21T13:05:49.133 回答
5

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

namespace {
    // code is in global scope
}

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

于 2013-03-21T13:06:05.033 回答
0

如何设置没有括号的全局命名空间?

<?php
declare(encoding='UTF-8');
namespace MyProject {

const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
}

namespace { // global code
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>

只是尝试以非括号样式编写此代码

于 2019-10-11T13:16:38.303 回答
-2

我认为第一个只包括“任何”类。但第二个包括大括号之间的所有类。

于 2013-03-21T13:06:41.950 回答