In diesem Artikel wird hauptsächlich der Singleton-Modus in PHP ausführlich erläutert. Wie der Name schon sagt, gibt es im Singleton-Modus nur eine Instanz Der Singleton-Modus stellt sicher, dass eine bestimmte Klasse nur eine Instanz hat. Instanziieren Sie diese selbst und stellen Sie diese Instanz dem gesamten System zur Verfügung.
Drei Schlüsselpunkte des Singleton-Musters:
1. Eine Klasse kann nur eine Instanz haben.
2. Sie müssen diese Instanz selbst erstellen.
3. Sie müssen diese Instanz selbst für das gesamte System bereitstellen.
Warum den PHP-Singleton-Modus verwenden?
1. Ein wichtiger Aspekt von PHP-Anwendungen betrifft Datenbanken. Wenn Sie den Singleton-Modus verwenden, können Sie eine große Anzahl von Datenbankoperationen in einer Anwendung vermeiden Eine große Anzahl von Datenbankvorgängen kann auch dazu führen, dass die Datenbankverbindungen reduziert werden, sodass die Wahrscheinlichkeit geringer ist, dass zu viele Verbindungen hergestellt werden.
2. Wenn eine Klasse benötigt wird, um bestimmte Konfigurationsinformationen in einem System global zu steuern, dann kann sie einfach im Singleton-Modus implementiert werden.
3. Das Debuggen in einer Seitenanforderung ist einfach, da der gesamte Code in einer Klasse konzentriert ist. Sie können Hooks in der Klasse setzen, Protokolle ausgeben und var_dump() und Echo überall vermeiden.
Dieses Beispiel reicht aus, um die Magie des Single-Interest-Modus tief zu verstehen:
<?php/** * 设计模式之单例模式 * $_instance必须声明为静态的私有变量 * 构造函数必须声明为私有,防止外部程序new类从而失去单例模式的意义 * getInstance()方法必须设置为公有的,必须调用此方法以返回实例的一个引用 * ::操作符只能访问静态变量和静态函数 * new对象都会消耗内存 * 使用场景:最常用的地方是数据库连接。 * 使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。 */class Girlfriend { //保存例实例在此属性中 private static $_instance; //构造函数声明为private,防止直接创建对象 private function __construct() { echo '实例初始化了!'; } //单例方法 public static function get_instance() { var_dump(isset(self::$_instance)); if(!isset(self::$_instance)) { self::$_instance=new self(); } return self::$_instance; } //阻止用户复制对象实例 private function __clone() { trigger_error('禁止克隆' ,E_USER_ERROR); } function test() { echo("here is a test"); } }// 这个写法会出错,因为构造方法被声明为private //$test = new Girlfriend; // 下面将得到该类的单例对象$test = Girlfriend::get_instance();$test = Girlfriend::get_instance();$test->test();// 复制对象将导致一个E_USER_ERROR. //$test_clone = clone $test;
Die beiden oben genannten Aufrufe: Girlfriend::get_instance() und der Konstruktor werden nur einmal aufgerufen, wenn die Die anfängliche Instanz wird verwendet, und die anfängliche var_dump(isset(self::$_instance)) gibt „false“ zurück, und der Konstruktor wird in mehreren nachfolgenden Instanzen nicht ausgegeben … var_dump(isset(self::$_instance)) gibt „true“ zurück. . .
Eine Klasse, die ihren Namen verdient, hat nur eine Instanz ... Ich glaube, dass jeder dieses Beispiel im Detail verstehen sollte.
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des Singleton-Musters in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!