Globaler Namensraum

(PHP 5 >= 5.3.0, PHP 7)

Ohne die Definition eines Namespace werden alle Klassen- und Funktionsdefinitionen im globalen Namensraum platziert, so wie dies auch in PHP geschah bevor Namespaces unterstützt wurden. Wenn man dem Namen ein \ voranstellt, so spezifiziert man, dass der Name dem globalen Namensraum angehört, auch wenn man sich im Kontext eines Namensraumes befindet.

Beispiel #1 Verwenden der Spezifikation des gloablen Namensraumes

<?php
namespace A\B\C;

/* Diese Funktion ist A\B\C\fopen */
function fopen() {
     
/* ... */
     
$f = \fopen(...); // globale Funktion fopen aufrufen
     
return $f;
}
?>

add a note add a note

User Contributed Notes 4 notes

up
18
routinet
5 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
nobody at example dot com
1 year 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
hileon at gmail dot com
10 months ago
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.
up
-16
xmarcos at gmail dot com
4 years ago
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.
To Top