ホームページ  >  記事  >  バックエンド開発  >  PHPはシングルトンを実装できますか?

PHPはシングルトンを実装できますか?

藏色散人
藏色散人オリジナル
2021-04-01 09:25:551416ブラウズ

php はシングルトンを実装できます。シングルトンの実装方法は次のとおりです: 1. クラスの唯一のインスタンスを保存するプライベート静的メンバー変数を適用します。 2. オブジェクトが作成されないようにプライベート コンストラクターを宣言します。 ;3. 唯一のインスタンスを外部から取得するための static public メソッドを宣言します。

PHPはシングルトンを実装できますか?

この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター

シングルトンの実装方法PHP

  • クラスの唯一のインスタンスを保存するためにプライベート静的メンバー変数を適用します

  • これを防ぐためにプライベート コンストラクターを宣言しますオブジェクトがクラス外で作成されないようにする

  • 一意のインスタンスを外部から取得するための静的パブリック メソッドを宣言する

これら 3 つの手順を完了すると、はシングルトンですが、このシングルトン この例は安全ではありません。このシングルトンを安全にしたい場合は、次の 2 つの手順が必要です (不完全な点がある場合は追加してください)

  • 宣言オブジェクトのクローン作成を防ぐためのプライベート クローン作成メソッド

  • __sleep メソッドをオーバーライドし、リターンを空白のままにして、シリアル化および逆シリアル化によって新しいオブジェクトが取得されるのを防ぎます

##
<?php
/**
 * 单列模式(防止对象克隆、对象序列化反序列化)
 * Created by PhpStorm.
 * User: Jeaforea
 * Date: 2019/3/14
 * Time: 17:56
 */
namespace Kanshenmekan\Buzhunkan\Zaikandasini;
class SetSingleton{
    private static $new; //申请一个私有的静态成员变量来保存该类的唯一实例
    private function __construct() {} //声明私有的构造方法,防止类外部创建对象
    public static function instance () { //声明一个静态公共方法,供外部获取唯一实例
        if (!(self::$new instanceof self)) {
            self::$new = new self;
        }
        return self::$new;
    }
    private function __clone() {} //声明私有的克隆方法,防止对象被克隆
    public function __sleep() { //重写__sleep方法,将返回置空,防止序列化反序列化获得新的对象
        return [];
    }
}

[推奨学習:PHP ビデオ チュートリアル]

以上がPHPはシングルトンを実装できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。