ホームページ  >  記事  >  バックエンド開発  >  PHP でシングルトン モードを使用する必要があるのはなぜですか?

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

黄舟
黄舟オリジナル
2017-09-06 09:43:362482ブラウズ

PHP がシングルトン モードを使用する理由: オブジェクト指向で開発する場合、シングルトン モードを使用すると、大量のリソースを消費する過剰な新しい操作を回避できます。シングルトン モードでは、クラスを通じて特定の構成情報をグローバルに制御できます。

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

1. シングルトンパターンとは何ですか?

1. 意味

オブジェクト作成モードとして、シングルトン モードは、特定のクラスのインスタンスが 1 つだけ存在することを保証し、自身をインスタンス化し、このインスタンスをシステム全体にグローバルに提供します。インスタンスのコピーは作成されませんが、シングルトン クラス内に格納されているインスタンスへの参照を返します。

PHP のアプリケーションは主にデータベース アプリケーションであるため、アプリケーション内で大量のデータベース操作が発生するため、オブジェクト指向で開発する場合、シングルトン モードを使用すると、大量のリソースを回避できます。新しい操作によって消費されます。特定の構成情報をグローバルに制御するためにシステム内でクラスが必要な場合は、シングルトン パターンを使用して簡単に実装できます。

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

(1) クラスの唯一のインスタンスを保存するには、静的メンバー変数が必要です:

private static $_instance;

(2) コンストラクターとクローン関数を宣言する必要があります。 private、新しいクラスを使用して外部プログラムがシングルトン モードの意味を失うのを防ぐには:

private function __construct()   
{   
    $this->_db = pg_connect('xxxx');  
}   
private function __clone()  
{  
}//覆盖__clone()方法,禁止克隆

(3) このインスタンスにアクセスするにはパブリック静的メソッド (通常は getInstance メソッド) を提供する必要があります。これにより、への参照が返されます。唯一のインスタンス

public static function getInstance()    
{    
    if(! (self::$_instance instanceof self) )   
    {    
        self::$_instance = new self();    
    }  
    return self::$_instance;    
  
}

2. シングルトン モードを使用する理由

ほとんどの人は、シングルトン パターンの目的をその文字通りの意味から理解し、システム リソースを節約し、インスタンス化の繰り返しを回避し、一種の「家族計画」であると考えています。

そして、PHP はページの実行が終了するたびに、メモリからすべてのリソースをクリーンアップします。したがって、実際には、PHP のシングルトンは実行されるたびに再インスタンス化する必要があり、シングルトンのインスタンス化を繰り返す意味が失われます。

この点だけ見ると、PHP のシングルトンは確かに少し残念ですが、シングルトンにはこの機能とアプリケーションしかないのでしょうか? 答えは「ノー」です。見てみましょう。

PHP のアプリケーションは主にデータベース アプリケーションであるため、オブジェクト指向で開発する場合 (ナンセンス)、シングルトン モードを使用すると、アプリケーション内で大量のデータベース操作が発生することになります。新しい操作によって消費される大量のリソース。

特定の構成情報をグローバルに制御するためにシステム内のクラスが必要な場合は、シングルトン パターンを使用して簡単に実装できます。 これについては、zend Framework の FrontController 部分を参照できます。

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

1. PHP の欠点:

PHP 言語はインタープリタ型スクリプト言語であるため、各 PHP ページが解釈されて実行された後に、関連するすべてのリソースがリサイクルされます。

つまり、PHP には言語レベルでオブジェクトをメモリに常駐させる方法がありません。これは、たとえば Java では、存続期間中常に存在します。ここで、変数はページ間レベルであり、このインスタンスはアプリケーションのライフサイクル内で真に一意になる可能性があります。

ただし、PHP では、グローバル変数であろうとクラスの静的メンバーであろうと、すべての変数はページレベルであり、ページが実行されるたびに、新しいオブジェクトが再確立され、ページの実行後にクリアされます。このようにPHPシングルトンモードはあまり意味がないようです。

そのため、PHP シングルトン モードは、単一のページ レベルのリクエストで複数のアプリケーション シナリオが発生し、同じオブジェクト リソースを共有する必要がある場合にのみ非常に意味があると思います。

2. PHP におけるシングルトン モードのアプリケーション シナリオ:

(1) アプリケーションとデータベース間の対話

アプリケーションでは、データベースへの接続行為など、多数のデータベース操作が行われます。シングルトン モードを使用すると、新しい操作のたびにメモリ リソースとシステム リソースが消費されるため、多数の新しい操作を回避できます。

(2)、構成情報の制御

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

関連知識の詳細については、PHP 中国語 Web サイトをご覧ください。 ! !

以上がPHP でシングルトン モードを使用する必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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