在PHP中,我是否应该始终使用完全限定的类名?

3

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

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

为什么不直接使用完全限定类名呢?

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

所以你不需要担心这个文件是否被用在任何命名空间中,对吧?
1个回答

2

如果你需要引用来自另一个命名空间的类,你需要使用完全限定的命名空间。例如:

<?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实例。
如果你在自己的命名空间中使用来自一个单独包/命名空间的类,请使用完全限定的命名空间。 如果您在同一命名空间内使用类,请只使用限定的命名空间。

我知道这是一个老问题,但我认为它仍然相关。我也有一些关于它使用的问题。use ...... extends ... 语句怎么样?名称解析规则 页面中的示例不包括这两种情况。人们可以推断,但它们并不明确。 - akinuri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接