全局空间

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

在没有任何命名空间定义的情况下,所有类和函数定义都将放置在全局空间中 - 就像在支持命名空间之前在 PHP 中一样。在命名空间的上下文中,用 \ 作为前缀将指定需要从全局空间获取名称。

示例 #1 使用全局空间规范

<?php
namespace A\B\C;

/* 此函数为 A\B\C\fopen */
function fopen() {
/* ... */
$f = \fopen(...); // 调用全局 fopen
return $f;
}
?>

添加笔记

用户贡献的笔记 6 笔记

59
routinet
12 年前
包含的文件将默认为全局命名空间。
<?php
//test.php
namespace test {
include
'test1.inc';
echo
'-',__NAMESPACE__,'-<br />';
}
?>

<?php
//test1.inc
echo '-',__NAMESPACE__,'-<br />';
?>

test.php 的结果

--
-test-
2
PhoneixSegovia at gmail dot com
1 年前
请注意,变量不属于命名空间,因此它们始终是全局的(或作用域到函数等),并且不能像其他命名空间内容一样访问。

所以不是

namespace Foo;
$var = "hello";
echo \Foo\$var;
15
nobody at example dot com
9 年前
在命名空间上下文中,Exception 类需要使用全局前缀运算符。

<?php

namespace hey\ho\lets\go;

class
MyClass
{
public function
failToCatch()
{
try {
$thing = somethingThrowingAnException();
} catch (
Exception $ex) {
// 未捕获
}
}

public function
succeedToCatch()
{
try {
$thing = somethingThrowingAnException();
} catch (
\Exception $ex) {
// 现在已捕获
}
}

}
0
dmc60 at cam dot ac dot uk
6 个月前
要定义一个关联数组(哈希),使其成为命名空间的一部分,而不是进入全局命名空间,只需将其声明为 const,而不是变量。

这对查找表、配置设置等很有用。

// 例如。不要写

$my_datatypes = [
"sterility" => [
"xlsx" => [
"Sample Type",
"Run Pass/Fail",
"Result"
],
"db" => [
"SampleType",
"RunPassFail",
"Result"
]
]
];

// ...像这样声明查找表

const MY_DATATYPES = [
"sterility" => [
"xlsx" => [
"Sample Type",
"Run Pass/Fail",
"Result"
],
"db" => [
"SampleType",
"RunPassFail",
"Result"
]
]
];

// ...它将在当前命名空间中声明。
-27
hileon at gmail dot com
8 年前
这种访问全局名称的设计很糟糕,至少很不方便。
如果您有一些旧代码,并且尝试将其复制并在某个命名空间下重新使用。您必须在任何全局函数调用上添加前缀 "\"。
-43
xmarcos at gmail dot com
12 年前
这是预期的行为,您必须在文件顶部声明命名空间以“扩展”它。

如果您包含一个全局命名空间文件,它将对全局命名空间进行操作。
To Top