当我必须在所有文件中使用一些类似的use statements
时,我发现这很烦人。
不时地,我必须复制所有 conrollers 非常常见的行,例如
use Symfony'Bundle'FrameworkBundle'Controller'Controller;
use Sensio'Bundle'FrameworkExtraBundle'Configuration'Method;
use Sensio'Bundle'FrameworkExtraBundle'Configuration'Route;
use Sensio'Bundle'FrameworkExtraBundle'Configuration'Template;
有什么方法可以在一个文件中定义它们,它们将被所有控制器使用,我的整个应用程序。
命名空间
的存在是为了防止文件之间的命名冲突,这就是为什么按照您的要求进行操作可能是不明智的。它可能会导致幻影错误,您无法解释,因为您忘记了类名的别名。更糟糕的是,如果其他人必须维护你的代码,他们真的可能会试图弄清楚为什么他们的Controller
类无法正确加载。
但是,如果您确实愿意,可以使用class_alias
文档来完成此操作。我建议坚持使用好的老式命名空间和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
的第一个类名尚未定义或加载,则将调用任何已注册的类自动加载器以加载它。
好吧,如果您使用IDE,则可以最大程度地减少这种烦恼。例如,NetBeans 会自动完成类的完整 FQCN。然后,您可以使用其修复导入功能将定义移动到使用部分。PHPStorm 和 Eclipse PDT 也有类似的功能。