初学者如果看到这个单例,可能会有懵

这个单例,确实不怎么完整。还可以通过魔术方法__clone __wakeup方法获取

最佳答案
<?php

final class Singleton
{
    // 保存实例
    private static $instance;

    // 第一次获取时创建
    public static function getInstance(): Singleton
    {
        if (null === static::$instance) {
            static::$instance = new static();
        }

        return static::$instance;
    }

    // 防止通过构造函数实例化
    private function __construct(){}

    // 防止被克隆
    private function __clone(){}

    // 防止被反系列化
    private function __wakeup(){}
}
3年前 评论
讨论数量: 3

file

我不看重 完整, 甚至还不喜欢 完整

因为 完整 会带来一堆几乎用不到的代码。

3年前 评论

    private function __construct()
    {

    }

    private function __clone()
    {

    }

单例类这些写,再加上final去修饰类名,除了unserialize和反射之外,算得上是一个更加健壮的单例。

3年前 评论
<?php

final class Singleton
{
    // 保存实例
    private static $instance;

    // 第一次获取时创建
    public static function getInstance(): Singleton
    {
        if (null === static::$instance) {
            static::$instance = new static();
        }

        return static::$instance;
    }

    // 防止通过构造函数实例化
    private function __construct(){}

    // 防止被克隆
    private function __clone(){}

    // 防止被反系列化
    private function __wakeup(){}
}
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!