最近我开始在PHP中使用命名空间,我不是所选择的命名空间分隔符/
的粉丝(因为大多数人都有共同的感觉)/
我有一个Registry.class.php
文件,它有一个Registry
类,在命名空间Library
我还有下面的文件Controller.class.php
,它有一个Controller
类,在命名空间中称为Project
现在在这个Project
命名空间中我需要访问Registry object
它在另一个命名空间Library
中所以我使用use Library'Registry
来导入命名空间
完成后,我可以像这样简单地访问我的Registry
类…
$this->registry = new Registry;
如果我没有使用use Library'Registry
那么我就必须像这样访问
$this->registry = new /Library/Registry;
我的问题就从这里开始了。
对于这个简单的例子,我只是引入Registry class
,在一个真实的项目中,想象几个其他类和命名空间被引入,所以我将使用use Library'Registry
和use Library'SOME OTHER CLASS
和use Library'YET ANOTHER CLASS
等
然后我可以对对象/类进行操作,就好像它们是在这个名称空间中开始一样。因此,我没有在类名前面加上适当的名称空间名称,而是简单地按其名称(new Registry;
)而不是new /Library/Registry;
实例化类
我想知道这是否被认为是不好的做法?它极大地简化了事情,使代码看起来更干净,但如果有什么不好的这个方法,我想知道之前,我用这个方法写了很多代码。当我用它们的命名空间实例化它们时,我应该是pre-fixing
我的类而不是用use /Path/to/Namespace/Classname
导入它们吗?
请与我分享你的知识,我知道它将工作的任何方式,但我想确保。下面添加了示例类和名称空间:
Controller.class.php
<?php
namespace Project
{
use Library'Registry;
class Controller
{
public $registry;
function __construct()
{
include('E:'Library'Registry.class.php');
$this->registry = new Registry;
}
function show()
{
$this->registry;
echo '<br>Registry was ran inside testcontroller.php<br>';
}
}
}
?>
Registry.class.php
<?php
// Registry.class.php
namespace Library
{
class Registry
{
function __construct()
{
echo 'Registry.class.php Constructor was ran';
}
}
}
?>
名称空间的主要目的之一是防止大型代码库中以及跨共享代码和导入库的名称冲突。如果没有名称冲突问题,那么我并不认为使用每个类有什么不妥。但是,如果您发现自己对所有类都这样做,那么我就会质疑为什么要首先使用名称空间。这似乎只有在你的代码被别人用作API或库时才有意义。