如何从父命名空间调用PHP一个类?

时间:2013-12-13 04:03:41

标签: php namespaces

我有以下名称空间结构,包含以下类文件

Application
|->App.php
|->Top
   |->Start.php
   |->Process.php
   |->Child
      |->Plugin.php

所以在App.php中我声明了

namespace Application;

在Startp.php声明

namespace Application\Top;
在Plugin.php声明

中的

namespace Application\Top\Child;

我看到我可以从App.php中调用Plugin.php类,如

$object = new Top\Child\Plugin();

如果它是一个子/孙子命名空间,但如果我想从Plugin.php调用Process.php怎么办?这是来自分支的父命名空间?是否有类似双点“..”的东西来表示命名空间中的上部父目录?我想打电话给

File: Plugin.php

$object = new ..\Process();

它不起作用,看起来我只能从根目录开始像

一样
$object = new \Application\Top\Process()

这是唯一的选择吗?谢谢!

1 个答案:

答案 0 :(得分:8)

正如它在这里提到的http://www.php.net/manual/en/language.namespaces.basics.php(在评论中),只有一种方法可以指定名称空间 - 来自root。您不能使用.. \来缩短名称空间调用。要缩短代码中的来电,可以使用

use \Application\Top\Process as SomeProcess;

并首先使用您的代码

$object = new SomeProcess();

您也可以编写类加载器。要调用$ object = new .. \ Process();这是草图:

$classPath = explode("\\", __NAMESPACE__);
array_pop($classPath);
$newClassPath = implode("\\", $classPath) . '\'. 'Process';
$object = new $newClassPath();