この記事では、PHP シングルトン モードの定義と使用方法を主に紹介し、具体的なデータベース操作クラスの形式に基づいて、PHP シングルトン モードの機能、定義、使用方法、および関連する注意事項を詳細に分析します。
詳細は次のとおりです: まず、シングルトン モードについて簡単に紹介します。シングルトンモードは、アプリケーション内で特定のクラスのインスタンスを1つだけ保持するモードであり、外部環境の影響により、このクラスの2番目のインスタンスを生成することはできません。実用的な観点から見た利点は、WEB 開発において単一のデータ操作クラス インスタンスの存在を維持する場合、大規模なソフトウェア開発において不必要な冗長な接続データベース リソースの消費を削減できることです。維持するシングルトン シングルトンは常にメモリを占有し、コピーを持たないため、プログラムの状態はさまざまな操作を同期します。
PHP の場合、シングルトンを使用する最も一般的な機会は、データベース操作クラスを作成することです。ただし、PHP でシングルトンを実装する場合は、次のルールがあります: 1) シングルトン クラスには、現在宣言されているコンストラクターがあり、プライベートである必要があります。 2) シングルトン クラスのインスタンスが 1 つだけ存在するように、シングルトン クラスにはクラスのインスタンスを格納するための静的変数が必要です。 3) シングルトン クラスは、このシングルトンを適用するために他のすべてのオブジェクトに静的メソッドを提供する必要があります。 上記の 3 つの条件が満たされる理由: 1) シングルトン クラスはアプリケーション全体の実行中に 1 回しか作成できず、この作成は外部呼び出しによって完了するのではなく、それ自体で完了するためです。したがって、シングルトン クラスはそれ自体をインスタンス化するため、そのコンストラクターはプライベートである必要があります。他の外部オブジェクトは、シングルトン クラスのコピーを再度構築することはできません。 2) シングルトン クラスはそれ自体をインスタンス化することしかできず、すべての外部アプリケーションに独自のインスタンスを提供する必要があるため、クラス内には外部からアクセスできる内部アクセス ポイントが必要であり、それがクラス内への唯一の定常アクセス ポイントです。したがって、シングルトン クラス自体がインスタンス化するインスタンス オブジェクトを格納するには、静的変数を指定する必要があります。 3) シングルトン クラスのコンストラクターはプライベートであるため、シングルトン クラスは、シングルトン クラスを呼び出すための外部環境に対する外部インターフェイスを提供する必要があります。そのため、シングルトン クラスを初期化するか、シングルトン クラスを返すことができる静的メソッドが必要です。オブジェクトへの参照。 簡単な例: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; } }
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チュートリアル
PHPオブジェクト指向-シングルカラムモード
HP基本デザインパターン(登録ツリーモード、ファクトリーモード、シングルカラムモード)、デザインモードシングルカラム
以上がPHPシングルトンパターンの定義と使用例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。