包含的文件将默认为全局命名空间。
<?php
//test.php
namespace test {
include 'test1.inc';
echo '-',__NAMESPACE__,'-<br />';
}
?>
<?php
//test1.inc
echo '-',__NAMESPACE__,'-<br />';
?>
test.php的结果
--
-test-
(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;
}
?>
包含的文件将默认为全局命名空间。
<?php
//test.php
namespace test {
include 'test1.inc';
echo '-',__NAMESPACE__,'-<br />';
}
?>
<?php
//test1.inc
echo '-',__NAMESPACE__,'-<br />';
?>
test.php的结果
--
-test-
请注意,变量不是命名空间的一部分,因此它们始终是全局的(或作用域为函数等),并且不能像其他命名空间内容那样访问。
所以不是
namespace Foo;
$var = "hello";
echo \Foo\$var;
在命名空间上下文中,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) {
// 现在已捕获
}
}
}
要定义一个关联数组(哈希),使其成为命名空间的一部分,而不是进入全局命名空间,只需将其声明为常量,而不是变量。
这对于查找表、配置设置等非常方便。
// 示例。而不是编写
$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"
]
]
];
// ...它将在当前命名空间中声明。