Heim >Backend-Entwicklung >PHP-Tutorial >Die Definition und Verwendung des PHP-Singleton-Musters

Die Definition und Verwendung des PHP-Singleton-Musters

怪我咯
怪我咯Original
2017-07-12 11:21:391152Durchsuche

Dieser Artikel stellt hauptsächlich die Definition und Verwendung des PHP-Singleton-Modus vor. Er analysiert detailliert die Funktion, Definition, Verwendung und die damit verbundenen Vorsichtsmaßnahmen basierend auf der spezifischen Datenbankoperation-Klassenform Bei Bedarf können Sie sich auf

Die Beispiele in diesem Artikel beziehen sich auf die Definition und Verwendung des PHP-Singleton-Modus. Teilen Sie es als Referenz mit allen:

Der Singleton-Modus wird auch als Verantwortungsmodus bezeichnet. Er wird verwendet, um einen Einzelfunktionszugriffspunkt im Programm zu erstellen Das instanziierte Objekt ist das einzige.
Alle Singleton-Muster haben mindestens die folgenden drei gemeinsamen Elemente:
1 Sie müssen einen Konstruktor haben und als privat gekennzeichnet sein
2 Sie haben eine statische Mitgliedsvariable, die eine Instanz der Klasse enthält
3. Sie verfügen über eine öffentliche statische Methode, um auf diese Instanz zuzugreifen
Singleton-Klassen können nicht direkt in anderen Klassen, sondern nur von ihnen selbst instanziiert werden. Es erstellt keine Kopie der Instanz, sondern gibt einen Verweis auf die intern in der Singleton-Klasse gespeicherte Instanz zurück.

Ein einfaches Beispiel:

class DB{
   private $_link;
   //   保持单例类的静态变量
   static $_instance;
   //   私有的构造函数
   private function construct(){
       $this->_link = @mysqli_connect(HOST, USER, PASSWORD, DATABASE);
       if(! ($this->_link)){
          echo 'Something wrong occurs on the database connection!';  
       }
   }
   //   防止单例类被克隆
   private function clone(){}
   //   外界访问单例类实例的接口
   public static function getInstance(){
       if(! (self::$_instance instanceof self)){
          self::$_instance = new self();
       }
       return self::$_instance;
   }
}

PS: Eine oben definierte clone()-Funktion verhindert, dass Singleton-Klassenobjekte geklont werden.

Das Folgende ist auch ein einfacher Singleton der Datenbankoperationsklasse als Referenz:

class DB {
   /**
    * the database connection
    * @var   resource
    * @access private
    */
   private $_link;
   /**
    * the static instance of single db
    * @var   object
    * @access static
    */
   static $_instance;
   /**
    * construct the single object
    * @return null
    * @access private
    */
   private function construct(){
       $this->_link = @mysqli_connect(HOST, USER, PASSWORD, DATABASE);
       if(! ($this->_link)){
          echo 'Something wrong occurs on the database connection!';  
       }
   }
   /**
    * empty clone
    * @return null
    * @access private
    */
   private function clone(){}
   /**
    * for other object to get the instance of db
    * @return self::instance
    * @access public
    */
   public static function getInstance(){
       if(! (self::$_instance instanceof self)){
          self::$_instance = new self();
       }
       return self::$_instance;
   }
   /**
    * query
    * @param  sql string
    * @param  message string
    * @return   resource
    * @access public
    */
   public function query($sql,$message){
       $result = @mysqli_query($this->$_link, $sql) or die($message . mysqli_error($this->$_link));
       return $result;
   }
   /**
    * mysqli_num_rows
    * @param  result resource
    * @return   int
    * @access public
    */
   public function num($result){
       return @mysqli_num_rows($result);
   }
   /**
    * mysqli_fetch_array
    * @param  result resource
    * @return   array
    * @access public
    */
   public function fetchArr($result){
       return @mysqli_fetch_array($result);
   }
   /**
    * mysqli_insert_id
    * @return   int
    * @access public
    */
   public function last_id(){
       return @mysqli_insert_id($this->_link);   
   }
   /**
    * close the database connection
    * @param  result resource
    * @return   null
    * @access public
    */
   public function close(){
       @mysqli_close($this->_link);
   }
   /**
    * fetch once result from the specific sql query
    * @param  sql string
    * @param  message string
    * @return   array
    * @access public
    */
   public function fetchArrOnce($sql, $message){
       $result = $this->query($sql, $message);
       $row = $this->fetchArr($result);
       return $row;
   }
   /**
    * fetch all results from the specific sql query
    * @param  sql string
    * @param  message string
    * @return   array
    * @access public
    */
   public function fetchArrMore($sql, $message){
       $result = $this->query($sql, $message);
       $moreRow = array();
       while($row = $this->fetchArr($result)){
          $moreRow[] = $row;
       }
       return $moreRow;
   }
   /**
    * fetch the number of results from the specific sql query
    * @param  sql string
    * @param  message string
    * @return   array
    * @access public
    */
   public function fetchNum($sql, $message){
       $result = $this->query($sql, $message);
       $resultNum = $this->num($result);
       return $resultNum;
   }
   /**
    * mysqli_prepare
    * @param  sql string
    * @return   stmt object
    * @access public
    */
   public function prepare($sql){
       return @mysqli_prepare($this->_link, $sql);
   }
   /**
    * mysqli_stmt_execute
    * @param  stmt object
    * @param  message string
    * @return   bool
    * @access public
    */
   public function stmt_execute($stmt, $message){
       @mysqli_stmt_execute($stmt) or die($message . mysqli_error($this->_link));
   }
}

Verwendung:

define("HOST", "localhost");
define("USER", "root");
define("PASSWORD", "");
define("DATABASE", "eee");
$db = DB::getInstance();

Das obige ist der detaillierte Inhalt vonDie Definition und Verwendung des PHP-Singleton-Musters. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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