我有以下命名空间结构和以下类文件
Application
|->App.php
|->Top
|->Start.php
|->Process.php
|->Child
|->Plugin.php
因此,在App.php中,我声明了
namespace Application;
在Startp.php中声明
namespace ApplicationTop;
在Plugin.php中声明
namespace ApplicationTopChild;
我看到我可以像一样从App.php调用Plugin.php类
$object = new TopChildPlugin();
如果它是子/孙名称空间,但如果我想从Plugin.php调用Process.php,那该怎么办?Plugin.php是分支的父名称空间?是否有类似双点".."的东西来指示命名空间中的上级父目录?我正在尝试调用类似的东西
File: Plugin.php
$object = new ..Process();
它不起作用,看起来我只能像一样从根开始
$object = new ApplicationTopProcess()
这是唯一的选择吗?非常感谢。
如前所述http://www.php.net/manual/en/language.namespaces.basics.php(在注释中)只有一种方法可以指定命名空间——从根目录。您不能使用..\以缩短命名空间调用。要缩短代码中的通话时间,可以使用
use ApplicationTopProcess as SomeProcess;
并使用,首先在您的代码
$object = new SomeProcess();
此外,您还可以编写类加载器。调用$object=new。。\Process();这是草图:
$classPath = explode("\", __NAMESPACE__);
array_pop($classPath);
$newClassPath = implode("\", $classPath) . '\'. 'Process';
$object = new $newClassPath();
当你想在单引号中使用双反斜杠时,一定要使用它们。