我应该总是在PHP中使用完全限定的类名吗?

时间:2014-08-16 05:10:21

标签: php autoload psr-0

我看到一些示例代码,例如

$log = new Monolog\Logger('name');

为什么不总是使用完全限定的类名呢?

$log = new \Monolog\Logger('name');

所以你不必担心这个文件是否在任何命名空间中使用,对吗?

1 个答案:

答案 0 :(得分:1)

如果要从单独的命名空间引用类,则可以使用完全限定的命名空间。例如:

<?php
namespace Foo\Bar;

class ClassName
{
    function __construct()
    {
        $this->foobar = new Monolog\Logger;
    }
}

在这种情况下,$this->foobar将被解析为Foo\Bar\Monolog\Logger的实例。

如果Monolog与Foo\Bar完全不同,我们不希望发生这种情况,因此我们使用完全限定的命名空间。

如果您使用\Monolog\Logger的完全限定名称空间,则$this->foobar将是Monolog\Logger的实例。

如果要在自己的命名空间中使用来自单独的包/命名空间的类,请使用完全限定的命名空间。 如果您在同一名称空间中使用类,请仅使用限定名称空间。