我有以下名称空间结构,包含以下类文件
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()
这是唯一的选择吗?谢谢!
答案 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();