ホームページ バックエンド開発 PHPチュートリアル PHPシングルトンパターンの定義と使用例を詳しく解説

PHPシングルトンパターンの定義と使用例を詳しく解説

May 26, 2018 pm 02:00 PM
php 詳しい説明

この記事では、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;
   }
}
ログイン後にコピー

上記で定義された __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));
   }
}
ログイン後にコピー

Use:

define("__HOST__", "localhost");
define("__USER__", "root");
define("__PASSWORD__", "");
define("__DATABASE__", "eee");
$db = DB::getInstance();
ログイン後にコピー

上記がこの記事の全内容です。みんなの勉強に役立ちます。


関連する推奨事項:

phpの基本デザインパターン(登録ツリーモード、ファクトリモード、シングルカラムモード)、デザインパターンシングルカラム_PHPチュートリアル

PHPオブジェクト指向-シングルカラムモード

HP基本デザインパターン(登録ツリーモード、ファクトリーモード、シングルカラムモード)、デザインモードシングルカラム

以上がPHPシングルトンパターンの定義と使用例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

See all articles