我不确定这是否与Symfony2.4.0有关,但当我有
时<?php
namespace Wow\DogeBundle\Command;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class ProbeCommand extends ContainerAwareCommand
{
protected function configure()
{
$this ->setName('a:name')
->setDescription('wow');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$whenithappened = new \DateTime();
//more code
}
}
此代码正常工作,但DateTime()前面的反斜杠是什么意思?一旦我删除反斜杠,我就会收到此错误:
PHP Fatal error: Class 'Wow\DogeBundle\Command\DateTime'
反向斜杠是否有某种逃避才能返回根命名空间?我可以有这个代码
<?php
$whenithappened = new \DateTime();
var_dump($whenithappened);
?>
在DateTime()
前面有或没有反斜杠时效果很好。
答案 0 :(得分:1)
如果在文件开头使用命名空间,则调用new DateTime()
将在同一名称空间中查找名为DateTime
的类,这将返回错误。使用new \DateTime()
,PHP将在其基类中搜索此类。
你的最后一个例子是有效的,因为它没有使用命名空间,找不到DateTime
类没有歧义。
答案 1 :(得分:1)
命名空间允许您定义自己的类,其名称与PHP的内置类相同,因此您可以(全部在一个文件中): -
namespace my\name
class DateTime
{
//some code here
}
$myDateTime = new DateTime(); // <- uses your DateTime class
$dateTime = new \DateTime(); // <- uses PHP's built in DateTime class.
所以\
告诉PHP使用根命名空间而不是你的。你是正确的,有时候你不需要它,但这是一个很好的习惯,以避免难以稍后跟踪错误。