我有以下命名空间结构与以下类文件
Application
|->App.php
|->Top
|->Start.php
|->Process.php
|->Child
|->Plugin.php
Run Code Online (Sandbox Code Playgroud)
所以我在App.php中声明过
namespace Application;
Run Code Online (Sandbox Code Playgroud)
在Startp.php声明
namespace Application\Top;
Run Code Online (Sandbox Code Playgroud)
在Plugin.php声明
namespace Application\Top\Child;
Run Code Online (Sandbox Code Playgroud)
我看到我可以从App.php中调用Plugin.php类
$object = new Top\Child\Plugin();
Run Code Online (Sandbox Code Playgroud)
如果它是一个子/孙子命名空间,但是如果我想从Plugin.php调用Process.php,这是来自分支的父命名空间呢?是否有类似双点".."的东西来表示命名空间中的上部父目录?我试着打电话
File: Plugin.php
$object = new ..\Process();
Run Code Online (Sandbox Code Playgroud)
它没有用,看起来我只能从根开始一路就好
$object = new \Application\Top\Process()
Run Code Online (Sandbox Code Playgroud)
这是唯一的选择吗?谢谢!
正如它在这里提到的http://www.php.net/manual/en/language.namespaces.basics.php(在评论中),只有一种方法来指定名称空间 - 来自root.您不能使用.. \来缩短名称空间调用.要缩短代码中的调用,您可以使用
use \Application\Top\Process as SomeProcess;
Run Code Online (Sandbox Code Playgroud)
并使用,首先在您的代码
$object = new SomeProcess();
Run Code Online (Sandbox Code Playgroud)
您也可以编写类加载器.要调用$ object = new ..\Process(); 这是草图:
$classPath = explode("\\", __NAMESPACE__);
array_pop($classPath);
$newClassPath = implode("\\", $classPath) . '\'. 'Process';
$object = new $newClassPath();
Run Code Online (Sandbox Code Playgroud)