I have the following namespace structure with the following class files
Application |->App.php |->Top |->Start.php |->Process.php |->Child |->Plugin.php
So in App.php I’ve declared
namespace Application;
in Startp.php declared
namespace ApplicationTop;
in Plugin.php declared
namespace ApplicationTopChild;
I see that I can call the Plugin.php class from the App.php like
$object = new TopChildPlugin();
if it’s a child/grandchild namespace, but what if I want to call Process.php from Plugin.php, which is the parent namespace from the branch? Is there something like double dots “..” to indicate the upper parent directory in namespace? I am trying to call something like
File: Plugin.php $object = new ..Process();
it didn’t work, it looks like I can only start all the way from the root like
$object = new ApplicationTopProcess()
Is this the only option? Thank you!
Advertisement
Answer
As it mentioned here http://www.php.net/manual/en/language.namespaces.basics.php (in comments) there is only one way to specify namespaces – from root. You can not use .. to shorten namespace calls. To shorten calls in you code you can use
use ApplicationTopProcess as SomeProcess;
and use, first at your code
$object = new SomeProcess();
Also you can write your class loader. To call $object = new ..Process(); Here is the sketch:
$classPath = explode("\", __NAMESPACE__); array_pop($classPath); $newClassPath = implode("\", $classPath) . '\'. 'Process'; $object = new $newClassPath();
Be sure to use double backslash when you want to use them in single quotes.