PHP 在构建对象时与 new 一起使用的 static 关键字

PHP static keyword used with new in building an object

我正在阅读有关 OOP 中的模式的内容,并遇到了单例模式的代码:

class Singleton
{
    /**
     * @var Singleton reference to singleton instance
     */
    private static $instance;

    /**
     * gets the instance via lazy initialization (created on first usage)
     *
     * @return self
     */
    public static function getInstance()
    {

        if (null === static::$instance) {
            static::$instance = new static;
        }

        return static::$instance;
    }

    /**
     * is not allowed to call from outside: private!
     *
     */
    private function __construct()
    {

    }

    /**
     * prevent the instance from being cloned
     *
     * @return void
     */
    private function __clone()
    {

    }

    /**
     * prevent from being unserialized
     *
     * @return void
     */
    private function __wakeup()
    {

    }
}

有问题的部分是static::$instance = new static;new static 究竟做了什么,或者这个例子是如何工作的。我熟悉你的平均值 new Object 但不熟悉 new static。任何对 php 文档的引用都会有很大帮助。

基本上这是一个可扩展的 class,每当您调用 getInstance() 时,您将得到一个您调用它的任何 class 的单例(扩展此单例 class).如果您只在一个实例中使用它,您可以硬编码 class 名称,或者如果您在 class.

中硬编码它,则使用 new self

此外,单例被视为反模式,有关此模式的更多详细信息,请参阅她的回答why-is-singleton-considered-an-anti-pattern