Heim >Backend-Entwicklung >PHP-Tutorial >Die Definition und Verwendung des PHP-Singleton-Musters
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!