PHPのシングルトンパターンの詳しい解説

小云云
リリース: 2023-03-22 13:18:02
オリジナル
2151 人が閲覧しました

この記事では主に PHP のシングルトン モードについて詳しく説明します。実際、シングルトン モードはその名前が示すように、オブジェクト作成モードとしてインスタンスが 1 つだけあります。特定のクラスのインスタンスが 1 つだけであることを保証し、そのクラスをインスタンス化してシステム全体に提供できるようにします。

シングルトンパターンの 3 つの重要なポイント:

1. クラスはインスタンスを 1 つだけ持つことができます。

2. このインスタンスは自分で作成する必要があります。

3. このインスタンスは自分でシステム全体に提供する必要があります。

なぜ PHP シングルトン パターンを使用するのですか?

1. PHP アプリケーションの主な特徴は、アプリケーション内で多数のデータベース操作が行われることです。シングルトン モードを使用すると、大量の新しい操作が必要になり、データベース接続も削減できるため、過剰な接続が発生する可能性が低くなります。

2. システム内の特定の構成情報をグローバルに制御するためにクラスが必要な場合、シングルトン モードを使用して簡単に実装できます。

3. すべてのコードが 1 つのクラスに集中しているため、ページ リクエストでのデバッグが簡単です。クラス内でフックを設定し、ログを出力し、どこでも var_dump() や echo を回避できます。

この例は、単一関心モードの魔法を深く理解するのに十分です:

<?php/**
 * 设计模式之单例模式
 * $_instance必须声明为静态的私有变量
 * 构造函数必须声明为私有,防止外部程序new类从而失去单例模式的意义
 * getInstance()方法必须设置为公有的,必须调用此方法以返回实例的一个引用
 * ::操作符只能访问静态变量和静态函数
 * new对象都会消耗内存
 * 使用场景:最常用的地方是数据库连接。
 * 使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。 */class Girlfriend
{    //保存例实例在此属性中
    private static $_instance;    //构造函数声明为private,防止直接创建对象
    private function __construct()
    {        echo &#39;实例初始化了!&#39;;
    }    //单例方法
    public static function get_instance()
    {        var_dump(isset(self::$_instance));        if(!isset(self::$_instance))
        {
            self::$_instance=new self();
        }        return self::$_instance;
    }    //阻止用户复制对象实例
    private function __clone()
    {        trigger_error(&#39;禁止克隆&#39; ,E_USER_ERROR);
    }    function test()
    {        echo("here is a test");
    }
}// 这个写法会出错,因为构造方法被声明为private
//$test = new Girlfriend;
// 下面将得到该类的单例对象$test = Girlfriend::get_instance();$test = Girlfriend::get_instance();$test->test();// 复制对象将导致一个E_USER_ERROR.
//$test_clone = clone $test;
ログイン後にコピー

上記の 2 つの呼び出し: Girlfriend::get_instance() とコンストラクターは初期インスタンスで 1 回だけ呼び出され、最初の var_dump(isset( self::$_instance )) は false を返し、後続のインスタンスではコンストラクターは出力されません... var_dump(isset(self::$_instance)) はすべて true を返します。 。 。
その名前にふさわしいクラスにはインスタンスが 1 つしかありません...誰もがこの例を深く理解できるはずです。

以上がPHPのシングルトンパターンの詳しい解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート