Heim > Artikel > Backend-Entwicklung > Singleton-Muster in PHP
1. Der Ursprung des Singleton-Musters
Klasse
ist eine Abstraktion einer Klasse von Dingen mit gemeinsamen Merkmalen im wirklichen Leben. Durch die Instanziierung einer Klasse werden viele Objekte generiert. aber Gleichzeitig verbraucht es auch viele Ressourcen (z. B. die Begrenzung der Anzahl der Verbindungen beim Herstellen einer Verbindung zur Datenbank
und beispielsweise das Öffnen des Ressourcenmanagers
). Daher besteht auch die Notwendigkeit, die Instanziierung einer Klasse einzuschränken, um die Einzigartigkeit von Ressourcen zu schützen. 类
是对现实生活中一类具有共同特征的事物的抽象,通过类的实例化,产生了许多的对象,但同时也产生了大量资源的消耗(例如在连接数据库
时连接数量的限制,又例如在计算机中打开资源管理器
却具有唯一性),由此也产生了对类的实例化进行了限定的需求,为了保护资源的唯一性,由此产生了单例模式
。
2.单例模式的定义
定义:单例模式singleton,是一种类的设计只会最多产生一个对象的设计思想。
3.单例模式的实例
a.创建一个空类 。
<?php class Use{ } $a=new Use();//实例化一个对象 ?>
b.能够多次实例化类,是产生多个对象的原因,所以可以通过私有化构造方法
。
<?php class Use{ private function __construct() { echo __FUNCTION__."<br>"; } } ?>
c.私有化构造方法
使得实例化对象产生的数目为0,由此可以通过在类的内部,通过静态方法
调用构造方法,然后将构造方法返回至外部。
<?php class Use{ private function __construct() { echo __FUNCTION__."<br>"; } public static function getInstance() { return new self(); } } $s1=Use::getSingleton(); ?>
d.通过上述的方法虽然能够实例化对象,但是同时也将构造方法的使用权限外放出去。如果想要该方法只返回一个对象,就得保证类内部有办法存着某个产生的对象,第一次产生新的,后面返回旧的。此时需要使用静态属性。
<?php class Use{ private static $object = NULL;//初始化为NULL,没有对象 private function __construct() { echo __FUNCTION__."<br>"; } public static function getInstance() { //判断类内部的静态属性是否存在对象 if(!(self::$object instanceof self)){ //当前保存的内容不是当前类的对象 self::$object = new self(); } //返回对象给外部 return self::$object; } } $s1=Use::getSingleton(); ?>
e.此时可以保证,通过调用静态方法
只得到一个对象
。但是依旧可以通过克隆
,不停的实例化新的对象,所以可以将克隆
2. Definition des Singleton-Musters Definition: Das Singleton-Muster ist eine Designidee, bei der ein Klassendesign höchstens ein Objekt erzeugt.
constructor
privatisieren können. 🎜<?php class Use{ private static $object = NULL;//初始化为NULL,没有对象 private function __construct() { echo __FUNCTION__."<br>"; } public static function getInstance() { //判断类内部的静态属性是否存在对象 if(!(self::$object instanceof self)){ //当前保存的内容不是当前类的对象 self::$object = new self(); } //返回对象给外部 return self::$object; } private function __clone(){} } $s1=Use::getSingleton(); ?>🎜 c. Privatisieren Sie den
Konstruktor
, sodass die Anzahl der instanziierten Objekte 0 ist, sodass Sie den Konstruktor über die statische Methode
innerhalb der Klasse aufrufen und dann zurückgeben können Konstruktor nach außen. 🎜rrreee🎜 d. Obwohl das Objekt über die obige Methode instanziiert werden kann, werden dadurch auch die Nutzungsrechte der Konstruktormethode freigegeben. Wenn Sie möchten, dass diese Methode nur ein Objekt zurückgibt, müssen Sie sicherstellen, dass es eine Möglichkeit gibt, ein generiertes Objekt innerhalb der Klasse zu speichern. Beim ersten Mal wird ein neues generiert und das alte wird später zurückgegeben. In diesem Fall müssen Sie statische Eigenschaften verwenden. 🎜rrreee🎜 e. An diesem Punkt kann garantiert werden, dass nur ein Objekt
durch Aufruf der statischen Methode
erhalten wird. Sie können jedoch weiterhin neue Objekte über clone
instanziieren, sodass Sie clone
privatisieren können. 🎜rrreee🎜🎜Empfohlen: 🎜php-Tutorial🎜🎜🎜🎜Das obige ist der detaillierte Inhalt vonSingleton-Muster in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!