Symfony2.4.0新的反斜杠classname()

时间:2013-12-18 15:26:43

标签: php symfony

我不确定这是否与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()前面有或没有反斜杠时效果很好。

2 个答案:

答案 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.

see it working

所以\告诉PHP使用根命名空间而不是你的。你是正确的,有时候你不需要它,但这是一个很好的习惯,以避免难以稍后跟踪错误。