PHP Conference Japan 2024

全域空間

(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;
}
?>

新增筆記

使用者貢獻的筆記 4 則筆記

routinet
13 年前
被包含的檔案將預設使用全域命名空間。
<?php
//test.php
namespace test {
include
'test1.inc';
echo
'-',__NAMESPACE__,'-<br />';
}
?>

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

test.php 的執行結果

--
-test-
PhoneixSegovia at gmail dot com
2 年前
請注意,變數不屬於命名空間的一部分,因此它們始終是全域的(或屬於函數作用域等),並且無法像其他命名空間元素一樣被訪問。

所以以下程式碼無效

namespace Foo;
$var = "hello";
echo \Foo\$var;
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) {
// 現在已捕捉到
}
}

}
dmc60 at cam dot ac dot uk
10 個月前
要定義一個關聯式陣列(雜湊),使其成為命名空間的一部分,而不是進入全域命名空間,只需將其宣告為 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"
]
]
];

// ...這樣它就會在目前的命名空間內被宣告。
To Top