Maison > Article > développement back-end > La définition et l'utilisation du modèle php singleton
Cet article présente principalement la définition et l'utilisation du mode PHP singleton. Il analyse en détail la fonction, la définition, l'utilisation et les précautions associées du mode PHP singleton en fonction du formulaire de classe opération de base de données spécifique, Friends. dans le besoin peuvent se référer à
Les exemples de cet article décrivent la définition et l'utilisation du modèle PHP singleton. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
Le mode singleton est également appelé mode responsabilité. Il est utilisé pour créer un point d'accès à fonction unique dans le programme. l'objet instancié est le seul.
Tous les modèles singleton ont au moins les trois éléments communs suivants :
1 Ils doivent avoir un constructeur et doivent être marqués privés
2 Ils ont une variable membre statique qui contient une instance de la classe 3. Ils disposent d'une méthode statique publique pour accéder à cette instance
Les classes Singleton ne peuvent pas être instanciées directement dans d'autres classes, mais ne peuvent être instanciées que par elles-mêmes. Il ne crée pas de copie de l'instance, mais renvoie une référence à l'instance stockée en interne dans la classe singleton.
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 : Une fonction clone() définie ci-dessus empêche le clonage des objets de classe singleton. Ce qui suit est également un simple singleton de la classe d'opération de base de données pour référence :
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)); } }Utilisation :
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!