An example of a non-compound PHP namespace:
namespace Html;
An example of a compound PHP namespace:
namespace NSHtml;
If I try to import a non-compound PHP namespace, I get the following error:
Warning: The use statement with non-compound name ‘Html’ has no effect in /home/public_html/Samples/PHP/Namespaces/ImportNamespace1.php on line 34
Next, I tried using a compound PHP namespace. Now the above error (while trying to use the namespace) disappears, but when I try to instantiate a class in the imported namespace, I get the error:
Fatal error: Uncaught Error: Class ‘Table’ not found in /home/public_html/Samples/PHP/Namespaces/ImportNamespace1.php:38
I find that what works is a combination of the following:
- Use a compound namespace
- Import the class and not the namespace Then, I can instantiate the class without any error along the way.
This is in contrast to what the manual says.
Please note I am using Lightspeed PHP version 7.3.
Here’s the code that works:
Namespace definition: must be compound (in File Namespace1.php):
<?php namespace NSHtml; class Table { } ?>
Import and use the class (rather than the namespace) (File ImportNamespace1.php):
use NSHtmlTable As Table; # Import and alias the class. $table = new Table(); ?>
I’d like to ask: Has anyone actually used a non-compound namespace and then imported the namespace (rather than the class) to instantiate a class? Kindly provide actual code.
Advertisement
Answer
If I understand you correctly, I think this is what you are looking for?
namespace b { class my_class{ function test() { echo 'here'; } } } namespace a { use b as c; // FQN (new bmy_class())->test(); // Aliased (new cmy_class())->test(); }
I would personally never write code like this, nor did I know that you can alias a namespace, but it appears to work.
Demo: https://3v4l.org/79Dmg
Edit
Here’s a version with two files and without bracketed namespaces
<?php // file b.php namespace b; class my_class { function test() { echo 'here'; } }
<?php // file a.php namespace a; use b as c; require_once 'b.php'; // FQN (new bmy_class())->test(); // Aliased (new cmy_class())->test();