PHP 8.4.1 Released!

グローバル空間

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

add a note

User Contributed Notes 4 notes

up
61
routinet
13 years ago
Included files will default to the global namespace.
<?php
//test.php
namespace test {
include
'test1.inc';
echo
'-',__NAMESPACE__,'-<br />';
}
?>

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

Results of test.php:

--
-test-
up
3
PhoneixSegovia at gmail dot com
2 years ago
Note that variables aren't part of the namespace so they are always global (or scoped to function, etc.) and can't be accessed the same way as other namespace stuff.

So no:

namespace Foo;
$var = "hello";
echo \Foo\$var;
up
16
nobody at example dot com
9 years ago
In namespaced context the Exception class needs to be prefixed with global prefix operator.

<?php

namespace hey\ho\lets\go;

class
MyClass
{
public function
failToCatch()
{
try {
$thing = somethingThrowingAnException();
} catch (
Exception $ex) {
// Not catched
}
}

public function
succeedToCatch()
{
try {
$thing = somethingThrowingAnException();
} catch (
\Exception $ex) {
// This is now catched
}
}

}
up
1
dmc60 at cam dot ac dot uk
10 months ago
To define an associative array (hash) so that it is part of the namespace, instead of going into the global namespace, just declare it as const, istead of as a variable.

This is handy for lookup tables, config settings, etc.

// Example. Instead of writing:

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

// ...declare the lookup table like this:

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

// ...and it will be declared within the current namespace.
To Top