Глобальное пространство

(PHP 5 >= 5.3.0, PHP 7)

Без определения пространства имен, определения всех классов и функций находятся в глобальном пространстве - также как это было в PHP до введения пространств имен. Добавление префикса \ к именам означает, что это имя должно находиться в глобальном пространстве, даже если вы находитесь в контексте определенного пространства имен.

Пример #1 Использование глобального пространства и его задание

<?php
namespace A\B\C;

/* Эта функция является A\B\C\fopen */
function fopen() { 
     
/* ... */
     
$f = \fopen(...); // вызов глобальной функции fopen
     
return $f;

?>

Коментарии

Автор:
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-
2011-08-29 02:22:14
http://php5.kiev.ua/manual/ru/language.namespaces.global.html
That's the expected behavior, you have to declare the namespace at the top of the file to "extend" it. 

If you include a global namespaced file, it will operate on the global namespace.
2012-05-21 22:08:50
http://php5.kiev.ua/manual/ru/language.namespaces.global.html
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
       
}
    }

}
2015-05-15 10:59:58
http://php5.kiev.ua/manual/ru/language.namespaces.global.html
This design of access globe name is bad, at least inconvenient.
In case that you have some legacy code, and try to copy and re-use it under some namespace. You have to add prefix "\" on any global function call.
2015-11-25 10:17:15
http://php5.kiev.ua/manual/ru/language.namespaces.global.html
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;
2022-08-24 15:18:21
http://php5.kiev.ua/manual/ru/language.namespaces.global.html
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.
2024-01-18 17:24:14
http://php5.kiev.ua/manual/ru/language.namespaces.global.html

    Поддержать сайт на родительском проекте КГБ