PHPシングルトンパターンの簡単な実装方法
<?php /** * 设计模式之单例模式 * $_instance必须声明为静态的私有变量 * 构造函数和析构函数必须声明为私有,防止外部程序new * 类从而失去单例模式的意义 * getInstance()方法必须设置为公有的,必须调用此方法 * 以返回实例的一个引用 * ::操作符只能访问静态变量和静态函数 * new对象都会消耗内存 * 使用场景:最常用的地方是数据库连接。 * 使用单例模式生成一个对象后, * 该对象可以被其它众多对象所使用。 */ class Example { //保存例实例在此属性中 private static $_instance; //构造函数声明为private,防止直接创建对象 private function __construct() { echo 'I am Construceted'; } //单例方法 public static function singleton() { if(!isset(self::$_instance)) { $c=__CLASS__; self::$_instance=new $c; } return self::$_instance; } //阻止用户复制对象实例 public function __clone() { trigger_error('Clone is not allow' ,E_USER_ERROR); } function test() { echo("test"); } } // 这个写法会出错,因为构造方法被声明为private $test = new Example; // 下面将得到Example类的单例对象 $test = Example::singleton(); $test->test(); // 复制对象将导致一个E_USER_ERROR. $test_clone = clone $test; ?>
まず、シングルトン モードの概念を理解する必要があります。
シングルトン モードは、その名前が示すように、インスタンスが 1 つだけ存在することを意味します。
オブジェクト作成モードとして、シングルトン モードでは、特定のクラスのインスタンスが 1 つだけであることが保証され、クラス自体がインスタンス化され、このインスタンスがシステム全体に提供されます。
このクラスをシングルトン クラスと呼びます。
シングルトン パターンには 3 つの主要なポイントがあります:
まず、クラスは
を 1 つだけ持つことができます。2 つ目は、このインスタンスを独自に作成する必要があるということです。
第三に、このインスタンスを独自にシステム全体に提供する必要があります。PHP シングルトン モードを使用する必要がある理由について説明しましょう。
ほとんどの人は、シングルトン パターンの文字通りの意味からその目的を理解し、システム リソースを節約し、繰り返しのインスタンス化を回避し、一種の「家族計画」であると考え、PHP は毎回それを実行し、すべてのリソースが消去されます。したがって、実際には、PHP のシングルトンは実行されるたびに再インスタンス化する必要があり、この点だけから見ても、PHP のシングルトンは確かに優れたものであると言われます。皆さんには少し残念ですが、シングルトンにはこの機能とアプリケーションしかないのでしょうか? 答えは「ノー」です。見てみましょう。
1. PHP は主にデータベース アプリケーションで使用されるため、オブジェクト指向で開発する場合 (ナンセンスです)、シングルトン モードを使用すると、この問題を回避できます。新たな操作リソースが大量に消費されます。
2. システム内の特定の構成情報をグローバルに制御するためにクラスが必要な場合は、zend フレームワークの FrontController 部分にあるシングルトン モードを使用して簡単に実装できます。
3. ページリクエストでは、すべてのコード (データベース操作クラス db など) が 1 つのクラスに集中しているため、クラス内にフックを設定してログを出力し、どこでも var_dump や echo を回避できます。 。
上記のPHPシングルトンモードの簡単な実装方法は、編集者が共有した内容ですので、ご参考になれば幸いです。また、皆さんもScript Homeを応援していただければ幸いです。