PHPデザインパターンのシングルトンパターン(シングルトンパターン)

アプリケーションシナリオ

データベースコネクタ
ログレコーダ
アプリケーションロックファイル(理論的には、アプリケーション全体に対して1つのロックファイルしかありません...)

構造

4つのプライベートおよび1つのパブリック
民営化構築方法:newを使用して複数のインスタンスを作成することを防止します。
民営化クローン作成方法:複数のインスタンスをクローン化することを防止します。
民営化再構築方法:逆シリアル
化を防止します。

デモ
<?php
/**
 * 普通类
 * Class Db1
 */
class Db1
{
    
    
    public static $instance = null;

    public static function getInstance()
    {
    
    
        if (null === static::$instance) {
    
    
            static::$instance = new static();//实例化自身
        }

        return static::$instance;
    }

    public function __construct()
    {
    
    
    }

    public function __clone()
    {
    
    
    }

    public function __wakeup()
    {
    
    
    }

}
$db1 = new Db1();
$db2 = new Db1();
$db3 = clone $db2;
$db4 = Db1::getInstance();
$db5 = unserialize(serialize($db4));


var_dump($db1);
echo '<hr>';
var_dump($db2);
echo '<hr>';
var_dump($db3);
echo '<hr>';
var_dump($db4);
echo '<hr>';
var_dump($db5);
echo '<hr>';
//打印结果
object(Db1)#1 (0) { }
object(Db1)#2 (0) { }
object(Db1)#3 (0) { }
object(Db1)#4 (0) { }
object(Db1)#5 (0) { }

ここに画像の説明を挿入します

/**
 * 单例
 * Class Db2
 */
class Db2
{
    
    
    private static $instance = null;

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

        return static::$instance;
    }

    /**
     * 防止使用 new 创建多个实例
     *
     * Db2 constructor.
     */
    private function __construct()
    {
    
    
    }

    /**
     * 防止 clone 多个实例
     */
    private function __clone()
    {
    
    
    }

    /**
     * 防止反序列化
     */
    private function __wakeup()
    {
    
    
    }
}

$db6 = Db2::getInstance();
$db7 = Db2::getInstance();

var_dump($db6);
echo '<hr>';
var_dump($db7);
echo '<hr>';
//输出结果 实例化后对象被存储 程序自始至终只做一次实例化
object(Db2)#6 (0) { }
object(Db2)#6 (0) { }

おすすめ

転載: blog.csdn.net/qq_41526316/article/details/108495826