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

Jim*_*988 0 php namespaces

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

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

在每个文件中我都声明了命名空间,如下所示:

为database.php

namespace Infrastructure\Core
{
    class Database
    {...}
}
Run Code Online (Sandbox Code Playgroud)

Model.php

namespace Infrastructure\Core
{
    class Model
    {...}
}
Run Code Online (Sandbox Code Playgroud)

等等...

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

的index.php

use Infrastructure\Core

class Main
{
    $database = new Database();
    $controller = new Controller();
    //...etc..
}
Run Code Online (Sandbox Code Playgroud)

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

的index.php

use Infrastructure\Core

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

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

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

Nan*_*nne 6

有几件事:

  1. 你的类需要加载,所以你要么自己构建一个基于classname // dir-name的自动加载器,要么手动包含正确的文件(所以用include和/或require

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

  3. 你的命名空间声明是正确的,你必须从'root'调用它们,所以它们以a开头 \

    $database = new \Infrastructure\Core\Database();
    
    Run Code Online (Sandbox Code Playgroud)