ホームページ  >  記事  >  バックエンド開発  >  (転送) PHPシングルトンモード

(転送) PHPシングルトンモード

WBOY
WBOYオリジナル
2016-06-23 14:30:351009ブラウズ

まず、シングルトン パターンの概念を理解する必要があります。それでは、シングルトン パターンとは何でしょうか。

シングルトン モードは、名前が示すように、インスタンスが 1 つだけ存在することを意味します。

オブジェクト作成モードとして、シングルトン モードでは、特定のクラスのインスタンスが 1 つだけであることが保証され、それ自体がインスタンス化され、このインスタンスがシステム全体に提供されます

このクラスをシングルトン クラスと呼びます。

シングルトン パターンの主なポイントは 3 つあります。

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

2 つ目は、このインスタンスを独自に作成する必要があります。

3 つ目は、このインスタンスをシステム全体に提供する必要があります。自体。

PHP シングルトン モードを使用する必要がある理由について説明しましょう。

ほとんどの人は、シングルトン パターンの文字通りの意味からその目的を理解し、システム リソースを節約し、繰り返しのインスタンス化を回避し、一種の「家族計画」であると考えています。そして、PHP はすべての実行を完了し、ページからすべてのリソースを削除します。したがって、PHP のシングルトンは実行されるたびに実際に再インスタンス化する必要があるため、この点だけから見ても、PHP のシングルトンは確かに少し残念です。シングルトンにはこの機能とアプリケーションしかありませんか? 答えは「いいえ」です。見てみましょう。

1. PHP は主にデータベース アプリケーションで使用されるため、オブジェクト指向で開発する場合 (ナンセンス)、シングルトン モードを使用すると大量のデータベース操作を回避できます。リソースを消費した新しい操作の数。

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

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



 1 <?php 2  3 /* 单例模式举例,其要点如下: 4  * 5  * 1. $_instance 必须声明为静态的私有变量 6  * 2. 构造函数和克隆函数必须声明为私有的,这是为了防止外部程序 new 类从而失去单例模式的意义 7  * 3. getInstance()方法必须声明为公有的,必须调用此方法以返回唯一实例的一个引用 8  * 4. ::操作符只能访问静态变量或静态函数 9  *10  */11 12 class People {13     private static $_instance = NULL;14 15     public $height = '';16 17     public $age = '';18 19     private function __construct() {20         $this -> height = '185';21         $this -> age = 25;22     }23 24     private function __clone() {25         //do something26     }27 28     static public function getInstance() {29         if (!self::$_instance instanceof self) {30             //echo 'lgh-big';31             self::$_instance = new self();32         } else {33             //for testing only34             //echo 'gdc-xiaoairener';35         }36 37         return self::$_instance;38     }39 40     public function getHeight() {41         echo $this -> height;42     }43 44     public function getAge() {45         echo $this -> age;46     }47 48 }49 50 function testInstance() {51     People::getInstance() -> getAge();52 }53 54 //begin to use the class55 56 $lgh = People::getInstance();57 $lgh -> getHeight();58 59 echo '<br />';60 testInstance();61 ?>

特記事項:
* 5. PHP の解釈および実行メカニズムにより、各 PHP ページが解釈および実行された後にすべての関連リソースがリサイクルされるため、PHP のシングルトン モードは相対的です。言い換えれば、PHP には言語レベルでオブジェクトをメモリに常駐させる方法がありません。 PHP では、グローバル変数であってもクラスの静的メンバーであっても、すべての変数はページ レベルにあり、その結果、新しいオブジェクトが再確立され、意味が完全に失われます。シングルトンの。ただし、実際のアプリケーションでは、同じページに複数のビジネス ロジックが存在する場合があります。このとき、シングルトン モードは、新しいオブジェクトの重複を効果的に回避する非常に重要な役割を果たします (注: 新しいオブジェクトはメモリ リソースを消費します)。 PHP のシングルトン モードは相対的であると言います

PHP 技術交換グループ 170855791

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