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


Should I always use fully qualified class name in PHP?

我看到一些示例代码,如

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

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

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

所以您不需要担心这个文件是否在任何名称空间中使用,对吗?

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

<?php
namespace Foo'Bar;
class ClassName
{
    function __construct()
    {
        $this->foobar = new Monolog'Logger;
    }
}

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

如果独白与Foo'Bar是一个完全不同的包,我们不希望发生这种情况,所以我们使用完全限定的命名空间。

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

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