Maison  >  Article  >  développement back-end  >  Modèle singleton en php

Modèle singleton en php

autoload
autoloadoriginal
2021-03-02 17:17:586102parcourir

1. L'origine du modèle singleton

est une abstraction d'une classe de choses ayant des caractéristiques communes dans la vie réelle, à travers des instances de classes isation, entraînant de nombreux objets, mais cela entraînait également la consommation de beaucoup de ressources (par exemple, la limite du nombre de connexions lors de la connexion 数据库, et par exemple, l'ouverture de 资源管理器 dans un ordinateur est unique ), qui a également abouti à Il existe une obligation de limiter l'instanciation d'une classe Afin de protéger le caractère unique des ressources, 单例模式 est né.

2. Définition du modèle singleton

Définition : le modèle singleton est une idée de conception selon laquelle une conception de classe ne produira qu'un seul objet.

3. Instance de modèle singleton

Créez une classe vide.                                                     >

<?php
   class Use{
   }
   $a=new Use();//实例化一个对象
?>

b. La possibilité d'instancier une classe plusieurs fois est la raison pour laquelle plusieurs objets sont générés, afin qu'elle puisse être privatisée

. 构造方法

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

c. La privatisation

rend le nombre d'objets instanciés générés à 0, afin que le constructeur puisse être appelé via 构造方法 à l'intérieur de la classe, puis le constructeur est renvoyé vers l'extérieur. 静态方法

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

d. Bien que l'objet puisse être instancié via la méthode ci-dessus, il libère également les droits d'utilisation de la méthode constructeur. Si vous souhaitez que cette méthode ne renvoie qu'un seul objet, vous devez vous assurer qu'il existe un moyen de stocker un objet généré dans la classe. Un nouveau objet est généré pour la première fois et l'ancien est renvoyé ultérieurement. Dans ce cas, vous devez utiliser des propriétés statiques.

<?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. À l'heure actuelle, il peut être garanti qu'un seul

sera obtenu en appelant 静态方法. Mais vous pouvez toujours instancier de nouveaux objets via 对象, vous pouvez donc privatiser 克隆. 克隆

<?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();
?>

Recommandé : tutoriel php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn