• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 全局空间

    (PHP 5 >= 5.3.0, PHP 7)

    如果没有定义任何命名空间,所有的类与函数的定义都是在全局空间,与 PHP 引入命名空间概念前一样。在名称前加上前缀表示该名称是全局空间中的名称,即使该名称位于其它的命名空间中时也是如此。

    Example #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-
    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
        }
      }
    }
    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.
    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.