2

use statements当我必须在所有文件中使用一些类似的东西时,我觉得很烦人 。

时不时地,我必须在所有控制器上复制非常常见的行,例如

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

有什么方法可以将它们定义在一个文件中,并且它们将被我的整个应用程序中的所有控制器使用。

4

2 回答 2

2

命名空间的存在是为了防止跨文件的命名冲突,这就是为什么按照您的要求去做可能是不明智的。它可能会导致您无法解释的幻影错误,因为您忘记了为类名起别名。更糟糕的是,如果其他人必须维护您的代码,他们可能真的会陷入困境,试图找出他们的Controller类无法正确加载的原因。

但是,如果您真的想要,您可以使用class_aliasdocs来完成此操作。我建议坚持使用良好的老式命名空间和use语句,但如果您想忽略我的建议,可以执行以下操作:

<?php // namespace_aliases.php

class_alias(
    'Symfony\Bundle\FrameworkBundle\Controller\Controller',
    'Controller'
);
class_alias(
    'Sensio\Bundle\FrameworkExtraBundle\Configuration\Method',
    'Method'
);

// etc.

然后在其他地方只包含该namespace_aliases.php文件。重要的是要注意,如果传递给的第一个类名class_alias尚未定义或加载,则将调用任何已注册的类自动加载器以加载它。

于 2012-08-17T03:59:24.103 回答
0

好吧,如果您使用 IDE,则可以最大程度地减少这种烦恼。例如,NetBeans 自动完成类的完整 FQCN。然后,您可以使用其修复导入功能将定义移动到使用部分。PHPStorm 和 Eclipse PDT 也有类似的特性。

于 2012-08-17T05:46:54.210 回答