9

在 Symfony 2 中,这条线是什么意思:

$task->setDueDate(new \DateTime('tomorrow'));

是什么意思\DateTime?可以从任何地方访问吗?

4

4 回答 4

34

首先,一个小的 FYI,这与 Symfony 没有任何关系——只是碰巧 Symfony2 使用了namespaces

当不使用命名空间时,datetime 类始终可以通过new DateTime()- 这是因为您已经在“根”命名空间中。但是,当您使用命名空间时,简单地使用new DateTime()不会起作用,因为它会在当前命名空间中查找该类。例子:

<?php

namespace MyApp\Component;

class Something
{
   function __construct()
   {
      $dt = new DateTime(); 
   }
}

这将导致错误(例如Class 'MyApp\Component\DateTime' not found in ...),因为MyApp\Component命名空间中没有名为 DateTime 的类。

这就是您发现的原因\DateTime(),它告诉解释器在类的“根”(?) 命名空间中查找DateTime

您还可以使用use关键字来导入DateTime类 - 脚本的顶部看起来像 - 这允许您调用new DateTime()

<?php

namespace MyApp\Component;

use \DateTime;
于 2013-03-13T16:29:19.247 回答
3

http://www.php.net/manual/en/language.namespaces.global.php

您还应该namespace X\Y;在文件顶部看到 a,这\DateTime意味着该类DateTime将从全局命名空间中获取,而不是X\Y.

这个 DateTime

于 2013-03-13T16:17:24.000 回答
2

正如其他所说,它引用了全局命名空间,并且 DateTime 集成在 php 中,请看这里: http ://www.php.net/manual/en/class.datetime.php 所以你不仅可以在 symfony 中使用它;)

于 2013-03-13T16:30:33.857 回答
1

\DateTime 是一个命名空间的 DateTime 类。您正在查看的文件顶部可能有一个使用 \X\X 减速的地方。\DateTime 应该可以在您可以声明使用 \X\X 的任何地方访问

于 2013-03-13T16:16:19.120 回答