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();