0

假设我有一个文件夹,其中包含一些文件:

  • 基础设施/核心/Database.php
  • 基础设施/核心/Model.php
  • 基础设施/核心/View.php
  • 基础设施/核心/Controller.php

在每个文件中,我都像这样声明了命名空间:

数据库.php

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

模型.php

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

ETC...

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

索引.php

use Infrastructure\Core

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

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

索引.php

use Infrastructure\Core

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

也不起作用,所以我最后想,好吧,我也必须包含文件......仍然不起作用..我做错了什么?我真的没有得到数百万个示例,因为它看起来与我以前使用的任何其他命名空间都大不相同。

有人可以用正确的语法提供一个特定于此示例的示例,以便我可以了解 PHP 的全部内容。我认为这是 php 中的一个稍微不同的概念?

4

2 回答 2

6

有几件事:

  1. 你的类需要被加载,所以你要么根据类名//目录名自己构建一个自动加载器,要么手动包含正确的文件(所以使用include和/或require

  2. 'use' 只是为了'shortcuts',现在忘记了

  3. 虽然您的命名空间声明是正确的,但您必须从“根”调用它们,因此它们以\

    $database = new \Infrastructure\Core\Database();
    
于 2013-10-21T20:29:49.920 回答
0

命名空间是代码的逻辑分隔符,\ 不一定是文件夹路径。

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

于 2013-10-21T20:30:48.817 回答