【问题标题】:PHP are included classes part of namespace or global?PHP是命名空间的一部分还是全局的?
【发布时间】:2012-11-10 15:52:41
【问题描述】:

我最近一直在研究名称空间。我正在创建一个 MVC 框架,并想尝试向 PHP 5.3+ 特性迈进。

假设我定义了一个命名空间,称之为 \Controller。

然后我想包含一个具有 Home 类的文件。

namespace Controller;

include "class.home.php";

文件内容:

class.home.php:

class Home {
    public function hello() {
    }
}

在这个例子中,Home 会是 Controller 命名空间的一部分吗?还是全局命名空间的一部分?

我希望能够像new \Controller\Home();那样访问主页,上面的代码会这样工作吗?

【问题讨论】:

    标签: php class namespaces


    【解决方案1】:

    类的命名空间取决于声明它的命名空间,而不是包含它的命名空间。如果是后者,就不可能清楚地知道某物将在哪个命名空间中。

    如果您没有在声明类的文件顶部写上namespace Foo\Bar\Baz;,则该类始终位于全局命名空间中。

    【讨论】:

      【解决方案2】:

      在您的情况下,Home 将不是 Controller 命名空间的一部分,因为您需要在 class.home.php 中定义命名空间,例如:

      namespace Controller;
      
      class Home {
          public function hello() {
          }
      }
      

      而且你可以:

      namespace Controller;
      
      include "class.home.php";
      
      new \Controller\Home();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-22
        • 1970-01-01
        • 1970-01-01
        • 2011-12-16
        • 2012-11-07
        • 2016-12-01
        • 2011-08-01
        相关资源
        最近更新 更多