シングルトン モードを実装する
php メソッド: まず、このクラスのオブジェクトを保存する静的プライベート変数を作成します。次に、オブジェクトを直接作成するために new を使用しないようにします。次に、オブジェクトのクローンを作成するために clone を使用しないようにします。最終的に [$instance] がシングルトン オブジェクトであるかどうかを判断し、そうでない場合は作成するだけです。
シングルトン モードを実装するための php メソッド:
シングルトン モードの定義: クラスのインスタンスが 1 つだけであることを確認します。 、それにグローバル アクセス ポイントを提供します。
PHP はシングルトン モードを実装します:
class Singleton { //创建静态私有的变量保存该类对象 static private $instance; //防止使用new直接创建对象 private function __construct(){} //防止使用clone克隆对象 private function __clone(){} static public function getInstance() { //判断$instance是否是Singleton的对象,不是则创建 if (!self::$instance instanceof self) { self::$instance = new self(); } return self::$instance; } public function test() { echo "我是一个单例模式"; } } $sing = Singleton::getInstance(); $sing->test(); $sing2 = new Singleton(); //Fatal error: Uncaught Error: Call to private Singleton::__construct() from invalid context in $sing3 = clone $sing; //Fatal error: Uncaught Error: Call to private Singleton::__clone() from context
PHP がシングルトン モードを実装することの重要性は何ですか:
意味がありません。PHP にはスレッドの概念がありません。コードはメモリ内に常駐せず、すべての変更を自分で制御できます。クラスのインスタンスが 1 つだけであることを保証する必要はありません。何がポイントですか?データベース接続クラスでシングルトン モードを使用する必要があります。一部のページが 2 つのデータベースに接続する必要がある場合はどうすればよいでしょうか?
本当に無意味なのでしょうか? ######もちろん違います。
コードを見てください:
class A { public function show() { echo "我是A类函数,要调用B类函数和C类函数<br/>"; $b = new B(); $b->show(); $c = new C(); $c->show('A'); } } class B { public function show() { echo "我是B类函数,要调用C类函数<br/>"; $c = new C(); $c->show('B'); } } class C { public function show($parm) { echo "我是C类函数,现在被{$parm}类函数调用<br/>"; } } $a = new A(); $a->show();
ここでの呼び出し中に、2 つのクラス C オブジェクトが作成されます。new は非常にリソースを消費する操作であることがわかります。ここでのクラス C が単一の In である場合、サンプル モードでは、new 1 回だけで十分です。このアイデアは問題ありませんが、通常は別のメソッドを使用してそれを実行します:
class A { public function show() { echo "我是A类函数,要调用B类函数和C类函数<br/>"; $b = Unit::getInstance('B'); $b->show(); $c = Unit::getInstance('C'); $c->show('A'); } } class B { public function show() { echo "我是B类函数,要调用C类函数<br/>"; $c = Unit::getInstance('C'); $c->show('B'); } } class C { public function __construct() { echo "C类对象被创建<br/>"; } public function show($parm) { echo "我是C类函数,现在被{$parm}类函数调用<br/>"; } } class Unit { static public function getInstance($class) { static $arr = null; if (!isset($arr[$class]) || !$arr[$class] instanceof $class) { $arr[$class] = new $class(); } return $arr[$class]; } } $a = new A(); $a->show();
コードを実行すると、C クラスが 1 回だけインスタンス化され、その後インスタンス化されることがわかります。実際、動作中は通常、静的変数を使用してオブジェクトを保存し、シングルトン モードを偽装して実装します。
シングルトン モードと静的変数を使用してシングルトンを実装する場合の違い:シングルトン モードでは、クラスに 1 つのオブジェクトのみの作成が強制されます。安全なインターフェースまたは統一されたインターフェースで表示されることもあります。静的変数のシングルトンを実装する目的は、主に新しい操作を減らすことですが、新しい操作やクローン操作を妨げるものではありません。
関連する学習に関する推奨事項:php プログラミング
以上がPHPでシングルトンモードを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。