PHP提供了两种声明命名空间的语法。您可以使用没有花括号的命名空间,也可以使用下面看到的带有花括号的命名空间。
不带花括号
namespace foo/bar;
class Any{}
带括号
namespace foo/bar {
class Any{}
}
这两种使用命名空间的方式,在功能或行为上是否有差异,还是它们的工作/功能方式相同?
PHP提供了两种声明命名空间的语法。您可以使用没有花括号的命名空间,也可以使用下面看到的带有花括号的命名空间。
不带花括号
namespace foo/bar;
class Any{}
带括号
namespace foo/bar {
class Any{}
}
这两种使用命名空间的方式,在功能或行为上是否有差异,还是它们的工作/功能方式相同?
每个情况都有不同的原因,PHP官网上有一个好的例子。
如果在一个文件中有多个命名空间或需要在包含在命名空间中的代码之外有全局非命名空间代码,则使用花括号(curly brackets)将命名空间括起来。
此外,如果一个文件中有多个命名空间,则也允许使用非括号语法。
根据PHP指南,不建议这样做,如果可以,请将一个文件中的命名空间保持为一个。
在第一种变体中,每个文件只能使用一个命名空间,而第二种变体允许多个命名空间。它们可以互换使用,并且可以在单个文件中多次出现以定义多个命名空间。唯一需要使用花括号的情况是:
namespace {
// code is in global scope
}
除了上面的例子之外,在单个文件中使用多个命名空间的一个潜在缺点是,自动加载程序使用目录和文件名来解析要加载的类;因此,不建议在一个文件中使用多个命名空间,除非您将多个脚本文件合并为一个文件。
如何在不使用括号的情况下设置全局命名空间?
<?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();
}
?>
尝试以非括号样式编写此代码
我认为第一个仅包括“任何”类。但是第二个包括花括号中的所有类。