使用关键字“use”有条件地导入类

时间:2014-07-24 08:56:41

标签: php namespaces conditional

我从未在任何地方见过这个结构,所以我想知道这样的表达式是否有问题:

if (condition) {

    use Symfony\Component\HttpFoundation\Response;

}

2 个答案:

答案 0 :(得分:7)

这会抛出语法错误。来自TFM:

  

必须在文件的最外层范围内声明use关键字   (全局范围)或内部命名空间声明。这是因为   导入是在编译时完成的,而不是运行时,因此不能   块范围。

答案 1 :(得分:7)

use唯一能做的就是 alias 一个类名。就是这样。没什么。
而不必在脚本中重复编写完全限定的类名:

$q = new \Foo\Bar\Baz\Quux;
if ($q instanceof \Foo\Bar\Baz\Quux) ...

您可以将其缩短为:

use Foo\Bar\Baz\Quux;

$q = new Quux;
if ($q instanceof Quux) ...

因此,有条件地使用use毫无意义。它只是一个语法助手;如果可以有条件地使用你的脚本语法会变得模棱两可,这是没人想要的。

它不会减少代码加载,因为代码只能通过require / include调用或自动加载显式加载。后者是非常优选的,因为它只在需要时才会懒散地起作用。