【问题标题】:Should I always use fully qualified class name in PHP?我应该总是在 PHP 中使用完全限定的类名吗?
【发布时间】:2014-10-09 19:42:36
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: php autoload psr-0


    【解决方案1】:

    如果您从单独的命名空间引用一个类,您将使用完全限定的命名空间。例如:

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

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

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

    如果您使用 \Monolog\Logger 的完全限定命名空间,$this-&gt;foobar 将是 Monolog\Logger 的一个实例。

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

    【讨论】:

    • 我知道这是一个老问题,但我认为它仍然相关。我对它的使用也有一些疑问。 use ...... extends ... 语句呢? Name resolution rules 页面中的示例不包括这两种情况。可以推断,但他们并不明确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 2017-03-17
    • 2020-11-12
    • 2012-04-01
    • 2012-01-10
    • 2011-01-24
    • 1970-01-01
    相关资源
    最近更新 更多