>  기사  >  백엔드 개발  >  PHP 싱글턴 패턴의 정의와 사용

PHP 싱글턴 패턴의 정의와 사용

怪我咯
怪我咯원래의
2017-07-12 11:21:391063검색

이 글은 주로 PHP 싱글턴 모드의 정의와 사용법을 소개하며, 구체적인 데이터베이스 연산클래스 형식을 바탕으로 PHP 싱글턴 모드의 기능, 정의, 사용 방법 및 관련 주의사항을 자세히 분석합니다. . 다음

이 문서의 예제에서는 PHP 싱글톤 패턴의 정의와 사용을 설명합니다. 참조를 위해 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

싱글톤 모드는 책임 모드라고도 합니다. 이는 프로그램에서 단일 함수 액세스 지점을 만드는 데 사용됩니다.
모든 싱글턴 패턴에는 최소한 다음 세 가지 공통 요소가 있습니다.
1. 생성자가 있어야 하며 비공개로 표시되어야 합니다.
2. 클래스의 인스턴스를 보유하는 정적 멤버 변수가 있습니다. 이 인스턴스의 공개 정적 메서드
싱글톤 클래스는 다른 클래스에서 직접 인스턴스화할 수 없으며 자체적으로만 인스턴스화할 수 있습니다. 인스턴스의 복사본을 생성하지 않지만 싱글톤 클래스에 내부적으로 저장된 인스턴스에 대한 참조를 반환합니다.

간단한 예:

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: 위에 정의된 clone() 함수는 싱글톤 클래스 객체가 복제되는 것을 방지합니다.

다음도 참조용 데이터베이스 작업 클래스의 간단한 싱글톤입니다.

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));
   }
}

용도:

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

위 내용은 PHP 싱글턴 패턴의 정의와 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.