包含所有命名空间并仅使用PHP中的类名访问类是不是很糟糕?

时间:2011-12-31 18:16:53

标签: php namespaces

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

下面我有一个在PHP中使用Namespace的基本/简单示例。

我有一个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 CLASS以及use Library\YET ANOTHER CLASS等...

然后,我可以对Objects /类进行操作,就像它们在这个名称空间中一样开始,而不是使用适当的Namespace名称预先修复类名,我只是通过名称实例化类({{1而不是new Registry;

我想知道这是否被视为不良做法?它大大简化了事情并使代码看起来更清晰IMO,但是如果在我使用这种方法编写大量代码之前我想知道这个方法有什么不好的地方。当我使用名称空间 INSTEAD 使用new /Library/Registry;导入它们时,我应该pre-fixing我的类吗?

请与我分享您的知识,我知道它会以任何方式工作,但我想确保。下面添加了示例类和命名空间:

Controller.class.php

use /Path/to/Namespace/Classname

Registry.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>';
        }
    }
}
?>

1 个答案:

答案 0 :(得分:3)

命名空间的主要目的之一是防止大型代码库中以及共享代码和导入库中的名称冲突。如果您没有名称冲突问题,那么我不一定会看到使用每个类有什么问题。但是,如果您发现自己为所有类执行此操作,那么我会问您为什么首先使用命名空间。如果您的代码将被其他人用作API或库,那么这对我来说似乎才有意义。