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

Ако нямат дефиниция на пространство от имена, дефинициите на всички класове и функции се разполагат в глобалното пространство - както беше в PHP преди да се добави поддръжката на пространства от имена. Използването на представка :: пред името указва, че се използва име от глобалното пространство, дори и в контекста на пространството от имена.

Example #1 Употреба на указването на имена от глобалното пространство

<?php
    
namespace A::B::C;
 
 
/* Това е функция A::B::C::fopen */
    
function fopen() { 
         
/* ... */
         
$f = ::fopen(...); // извикване на глобалния fopen
         
return $f;
    } 
?>

add a note add a note

User Contributed Notes 4 notes

up
20
routinet
6 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
2
nobody at example dot com
2 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
hileon at gmail dot com
1 year 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
-18
xmarcos at gmail dot com
5 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