PHP是包含在命名空间还是全局的类的一部分?

时间:2012-11-22 09:28:58

标签: php class namespaces

我最近一直在研究名称空间。我正在创建一个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();一样访问Home。上面的代码会像那样工作吗?

2 个答案:

答案 0 :(得分:1)

类的名称空间取决于声明它的名称空间,而不是它所包含的名称空间。如果是后者,那么就不可能清楚地知道什么名称空间将会出现。

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

答案 1 :(得分:0)

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

namespace Controller;

class Home {
    public function hello() {
    }
}

而且你可以:

namespace Controller;

include "class.home.php";

new \Controller\Home();