在PHP中包含所有的命名空间和仅使用类名访问类是不好的吗?


Is it bad to include all the Namespaces and access Classes with just their class name in PHP?

最近我开始在PHP中使用命名空间,我不是所选择的命名空间分隔符/的粉丝(因为大多数人都有共同的感觉)/

下面我有一个在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'Registryuse Library'SOME OTHER CLASSuse 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或库时才有意义。