Singleton-Muster in PHP

autoload
Freigeben: 2023-04-09 19:04:02
Original
6175 Leute haben es durchsucht

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();//实例化一个对象
?>
Nach dem Login kopieren

b.能够多次实例化类,是产生多个对象的原因,所以可以通过私有化构造方法

<?php
  class Use{
    private function __construct()
    {
      echo __FUNCTION__."<br>";
    }
   }
?>
Nach dem Login kopieren

c.私有化构造方法使得实例化对象产生的数目为0,由此可以通过在类的内部,通过静态方法调用构造方法,然后将构造方法返回至外部。

<?php
  class Use{
    private function __construct()
    {
     echo __FUNCTION__."<br>";
    }
    public static function getInstance()
    {
      return new self();
        }
   }
  $s1=Use::getSingleton();
?>
Nach dem Login kopieren

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();
?>
Nach dem Login kopieren

e.此时可以保证,通过调用静态方法只得到一个对象。但是依旧可以通过克隆,不停的实例化新的对象,所以可以将克隆

2. Definition des Singleton-Musters Definition: Das Singleton-Muster ist eine Designidee, bei der ein Klassendesign höchstens ein Objekt erzeugt.

3. Instanz des Singleton-Musters 🎜🎜🎜🎜 🎜a.                                                      reee🎜 b. Die Möglichkeit, eine Klasse mehrmals zu instanziieren, ist der Grund für die Generierung mehrerer Objekte, sodass Sie den 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();
?>
Nach dem Login kopieren
🎜 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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage