ホームページ >バックエンド開発 >PHPチュートリアル >PHPデザインパターンにおけるシングルトンパターンの解析

PHPデザインパターンにおけるシングルトンパターンの解析

一个新手
一个新手オリジナル
2017-10-09 09:11:331518ブラウズ

シングルトンモード 名前が示すように、シングルトンモードはオブジェクト作成モードとしてインスタンスが 1 つだけ存在することを保証し、自身をインスタンス化し、このインスタンスをシステム全体に提供します。

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

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

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

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

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

1. オブジェクト指向で開発する場合、PHP アプリケーションの主な側面はデータベース操作です。シングルトン モードを使用すると、新しい操作によって消費される大量のリソースを回避でき、データベース接続も減らすことができるため、過剰な接続が発生する可能性が低くなります。

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

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

ケース:

/**
 * 设计模式之单例模式
 * $_instance必须声明为静态的私有变量
 * 构造函数必须声明为私有,防止外部程序new类从而失去单例模式的意义
 * getInstance()方法必须设置为公有的,必须调用此方法以返回实例的一个引用
 * ::操作符只能访问静态变量和静态函数
 * new对象都会消耗内存
 * 使用场景:最常用的地方是数据库连接。
 * 使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。
 */
class man
{
    //保存例实例在此属性中
    private static $_instance;

    //构造函数声明为private,防止直接创建对象
    private function __construct()
    {
        echo '我被实例化了!';
    }

    //单例方法
    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('Clone is not allow' ,E_USER_ERROR);
    }

    function test()
    {
        echo("test");

    }
}

// 这个写法会出错,因为构造方法被声明为private
//$test = new man;

// 下面将得到Example类的单例对象
$test = man::get_instance();
$test = man::get_instance();
$test->test();

// 复制对象将导致一个E_USER_ERROR.
//$test_clone = clone $test;

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

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