“使用”没有别名的内置类

时间:2013-07-15 19:42:26

标签: php namespaces

我在其中一个PHP文件的顶部看到以下代码。

use DateTime, DateTimeZone;

这段代码是无用的还是我缺少的东西?

3 个答案:

答案 0 :(得分:2)

开发人员这样做是为了让他们的生活更轻松,并且在命名空间内工作时代码更漂亮。解释一下......

您使用命名空间来防止可能与不同框架的命名冲突。假设您在命名空间“MyApp”中工作。现在,因为您现在位于命名空间内,所以不能使用没有前导'\'的php的本机类,因为这些本机类存在于global namespace中(在类名之前用'\'表示)。因此,如果您需要使用本机DateTime类,则必须使用反斜杠 - \ DateTime。

但是,如果您知道要使用它们,也可以从其他命名空间导入内容 - 在命名空间声明后使用 use 关键字。这样,您不必使用您将要使用的类的完整命名空间名称,而只需使用您不习惯使用的类名称本身。

namespace MyApp;
use DateTime;

将\ DateTime类导入MyApp命名空间,有效地允许您在代码中使用DateTime。

您应该在php's website上阅读有关命名空间的更多信息。关于名称空间的内容比我在这篇文章中可能涉及的内容还要多。

答案 1 :(得分:1)

据推测,有问题的文件位于其自己的命名空间内。

使用它以便您不必在代码中使用\DateTime

答案 2 :(得分:1)

此代码是因为源文件可能还包含namespace定义。这意味着您只能在\定义之后使用前导namespace访问内置类:

像:

namespace Foo;

$dt = new \DateTime();

为了防止自己键入前导\或者为了能够包含一些遗留代码,他们将这些类别化了