ホームページ  >  記事  >  バックエンド開発  >  PHP シングルトン パターンの実装

PHP シングルトン パターンの実装

WBOY
WBOYオリジナル
2016-07-25 08:42:16865ブラウズ
  1. /**
  2. *
  3. * ユーザー: jifei
  4. * 日付: 2013-07-31
  5. * 時間: 23:19
  6. */
  7. /**
  8. * クラス Singleton
  9. * シングルトン パターンはモナド パターンとも呼ばれ、一般的に使用されるソフトウェア設計パターンです。このパターンを適用する場合、シングルトン オブジェクトのクラスはインスタンスが 1 つだけ存在することを保証する必要があります。
  10. * は DRY (Don't Reply Yourself) の考えを完全に体現しています。
  11. *
  12. * シングルトン パターンの実装の考え方は次のとおりです: クラスはオブジェクトへの参照 (常に同じもの) とインスタンスを取得するメソッド (通常は getInstance という名前を使用する静的メソッドである必要があります) を返すことができます。 ;
  13. * このメソッドを呼び出すと、クラスが保持する参照が空でない場合は、クラスのインスタンスが作成され、その参照が返されます。インスタンスはクラスが保持する参照に割り当てられます
  14. * 同時に、クラスのコンストラクターはプライベート メソッドとして定義されるため、他のコードがクラスのコンストラクターを呼び出してクラスのオブジェクトをインスタンス化することはできません。クラスの唯一のインスタンスは、クラスが提供する静的メソッドを通じてのみ取得できます。
  15. *
  16. * アプリケーション シナリオ: クラスにインスタンスが 1 つだけあるシナリオに適しています。データベース接続、ロギング、ショッピング カート
  17. * 欠点: PHP はページ レベルで実行され、ページ間でメモリ データを直接共有できません。
  18. */
  19. class Singleton
  20. {
  21. //クラスインスタンスのプライベート静的メンバー変数を保存
  22. private static $_instance;
  23. //プライベート コンストラクター メソッド
  24. プライベート関数 __construct()
  25. {
  26. echo 'これは構築されたメソッドです;';
  27. }
  28. // オブジェクトが複製されないように空のプライベート __clone メソッドを作成します
  29. プライベート関数 __clone()
  30. {
  31. }
  32. //唯一のインスタンス オブジェクトを取得するために使用されるシングル ケース メソッド
  33. public static function getInstance()
  34. {
  35. if (!(self::$_instance instantof self)) {
  36. //instanceof はオブジェクトの検出に使用されますおよびクラスの所属、オブジェクトが属するクラスがクラスのサブクラスであるかどうか is_subclass_of
  37. self::$_instance = new self();
  38. }
  39. return self::$_instance;
  40. }
  41. //Test
  42. public function test()
  43. {
  44. echo 123;
  45. }
  46. }
  47. $a = Singleton::getInstance();
  48. $a->test();
  49. echo PHP_EOL;
  50. $b = Singleton::getInstance(); /2 回目の呼び出しではコンストラクターは実行されません
  51. $b->test();
  52. echo PHP_EOL;
  53. //$c=new Singleton(); コンストラクターはプライベートであるため、エラーが報告されます
  54. //$ d=clone $a; オブジェクトのクローンを作成する エラーを報告する
コードをコピーする

PHP


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