PHP命名空间,我只是不明白

时间:2013-10-21 20:25:25

标签: php namespaces

说我有一个包含一些文件的文件夹:

  • 基础设施/核心/ database.php中
  • 基础设施/核心/ Model.php
  • 基础设施/核心/ View.php
  • 基础设施/核心/ Controller.php这样

在每个文件中我都声明了名称空间:

database.php中

namespace Infrastructure\Core
{
    class Database
    {...}
}

Model.php

namespace Infrastructure\Core
{
    class Model
    {...}
}

等...

现在我想使用该命名空间中的所有类。想象一下,我有以下根文件

的index.php

use Infrastructure\Core

class Main
{
    $database = new Database();
    $controller = new Controller();
    //...etc..
}

这几乎就像java和C#命名空间一样,但显然在PHP中它不起作用......所以以下内容也不起作用:

的index.php

use Infrastructure\Core

class Main
{
    $database = new Infrastructure\Core\Database();
    $controller = new Infrastructure\Core\Controller();
    //...etc..
}

也不起作用,所以我终于想到了,好吧我也必须包含文件然后......仍然无法工作..我做错了什么?我真的没有得到数以百万计的例子,因为它似乎与我之前使用的任何其他命名空间都有所不同。

有人可以使用正确的语法提供特定于此的示例,以便我可以使用PHP了解它的全部内容。我认为它在php中的概念略有不同?

2 个答案:

答案 0 :(得分:6)

有几件事:

  1. 您的类需要加载,因此您要么自己构建基于classname // dir-name的自动加载器,要么手动包含正确的文件(所以使用include和/或{{1 }}

  2. 'use'仅适用于'快捷方式',现在就忘掉了

  3. 当您的命名空间声明正确时,您必须从“root”调用它们,因此它们以require

    开头
    \

答案 1 :(得分:-1)

命名空间是代码的逻辑分隔,\不必要是指文件夹路径。

我在一段时间内没有用PHP编程,但我认为你没有使用 include 或其他机制来包含文件内容。