ホームページ バックエンド開発 PHPチュートリアル PHPシングルトンモードの詳細解説学習メモ_PHPチュートリアル

PHPシングルトンモードの詳細解説学習メモ_PHPチュートリアル

Jul 13, 2016 pm 05:16 PM
php のために 関数 シングルトン 勉強 開発する はい モデル 使用 ノート 簡略化する 詳しい説明

シングルトン モードは、開発と繰り返しの呼び出しを簡素化するために設計された PHP の機能です。シングルトン モードの使い方を詳しく紹介します。

1. シングルトンパターンの概念

名前が示すように、シングルトン パターンにはインスタンスが 1 つだけあり、それ自体がインスタンス化され、このインスタンスが世界に提供されます。強調する必要があるのは、シングルトン モード

であるということです。

クラスのインスタンスは 1 つだけであることを確認してください。

2. シングルトンパターンの3つのポイント

(1) クラスの唯一のインスタンスを保持するには静的変数が必要です

コードは次のとおりです コードをコピー

プライベート静的 $_instance;

(2) ユーザーがオブジェクトを作成したり、インスタンス オブジェクトをコピーしたりできないように、コンストラクターとクローン関数はプライベートである必要があります

コードは次のとおりです コードをコピー

プライベート関数 __construct()
{
//外部による直接インスタンス化を防ぐために、デフォルトの構築メソッドをプライベート化します
}
プライベート関数 __clone()
{
//ユーザーがインスタンスをコピーできないようにするプライベート クローン メソッド
}

(3) 一意のインスタンスへの参照を返すには、パブリック静的メソッド (通常は getInstance) を提供する必要があります

3. phpでシングルトンパターンを使用する理由
PHP 言語は、解釈されたスクリプト言語です。この動作メカニズムにより、各 PHP ページが解釈および実行された後に、関連するすべてのリソースが利用可能になります。

原料はリサイクルされます。言い換えれば、PHP には、asp.net、Java、その他のコンパイルとは異なり、言語レベルでオブジェクトをメモリに常駐させる方法がありません

たとえば、Java では、変数はアプリケーションのライフサイクル全体にわたって常に存在します。これはまさに

です。

アプリケーションのライフサイクル中にこのインスタンスを一意にするため。ただし、PHP では、すべての変数はグローバル変数またはクラスの静的変数のいずれかです

ステータスメンバーはすべてページレベルです。ページが実行されるたびに、新しいオブジェクトが再確立され、ページの実行後にクリアされます。

PHPシングルトンモードは意味がないようなので、PHPシングルトンモードは複数のページレベルのリクエストに対してのみ表示されると思います

アプリケーション シナリオで同じオブジェクト リソースの共有が必要な場合、これは非常に意味があります。

4. シングルトンパターンの実装方法

コードは次のとおりです コードをコピー
パブリック静的関数 getInstance()
{
If(! (self::$_instanceinstanceofself) )
                                  self::$_instance = 新しい self(); }
自分自身を返します::$_instance
;
}


コードは次のとおりです /**

* シングルトンパターンの例: デモ
​*/
クラスデモ{
//グローバルインスタンスの保存に使用される静的メンバー変数
プライベート静的 $_instance;
//外部が直接インスタンス化できないようにするためのプライベート構築メソッド
プライベート関数 __construct(){

}

//ユーザーがインスタンスをコピーできないようにするプライベート クローン メソッド

プライベート関数 __clone(){

}

// このクラスの唯一のインスタンスを返します

パブリック関数 getInstance(){
if(!(self::$_instanceinstanceofself))
{
Self::$_instance = 新しい self();
}
self::$_instance を返します;
}
//これが最初のテストメソッドです
パブリック関数 test1Function(){
echo 'これが最初のテストメソッドです';
}
//これは 2 番目のテストメソッドです
パブリック関数 test2Function(){
echo 'これは 2 番目のテストメソッドです';
}
}
//正しい使い方
@$demo = デモ::getInstance();
$demo->test1Function();
$demo->test2Function();
//構築メソッドがプライベートであるため、このインスタンス化ではエラーが発生します
//$demo_new = 新しいデモ;
//デフォルトのクローンメソッドはプライベートなので、デモをコピーするとエラーが発生します
// $demo_clone = クローン $demo;
?>

5. 単利モデルの適用場面
コードをコピー

(1) アプリケーションとデータベース間の対話。主にデータベース接続に使用されます

(2) システム内で構成情報をグローバルに制御するクラスが必要な場合、シングルトンモードを使用して簡単に実装できます

1. 一般的なデータベースアクセスの例:


コードは次のとおりです ...

//データベースハンドルを初期化します
$db = 新しい DB(...);

//ユーザー情報を追加します

$db->addUserInfo(...);


......

//関数内のデータベースにアクセスしてユーザー情報を検索します

関数getUserInfo()

{
$db = new DB(...);//新しいデータベースクラスを再度作成し、データベースとの接続を確立します
$db = query(....);//クエリ文に従ってデータベースにアクセスします
}

?>

2. シングルトン モードを適用してデータベースを操作します。

コードをコピー
コードは次のとおりですコードをコピー

クラスDB

{
プライベート $_db; プライベート静的 $_インスタンス
;
プライベート関数 __construct(...)
{
$this->_db = pg_connect(...);//postgrsql
}

プライベート関数 __clone() {} // __clone() メソッドをオーバーライドし、クローン作成を禁止します
;
パブリック静的関数 getInstance()
{
If(! (self::$_instanceinstanceofself) ) {
self::$_instance = 新しい self();                                                                          自己を返す::$_instance
}



パブリック関数addUserInfo(...)
{


}

パブリック関数getUserInfo(...)

{

}


}

//テスト

$db = DB::getInstance();

$db->addUserInfo(...);

$db->getUserInfo(...);

?>


深い理解

代码如下 复制幣

クラスデータベース{
 パブリック $conn;
 パブリック静的 $sql;
 パブリック静的 $instance=null;
 プライベート関数 __construct(){
  require_once('db.config.php');
  $this->conn = mysql_connect($db['host'],$db['user'],$db['password']);
  if(!mysql_select_db($db['database'],$this->conn)){
   echo "失败";
  };
  mysql_query('set names utf8',$this->conn);  
 }
 パブリック静的関数 getInstance(){
  if(is_null(self::$instance)){
   self::$instance = 新しいデータベース;
  }
  self::$instance を返します;
 }
 /**
* データベースのクエリ
​*/
 public function select($table,$condition=array(),$field = array()){
  $where='';
  if(!empty($condition)){
   
   foreach($condition as $k=>$v){
    $where.=$k."='".$v."' および ";
   }
   $where='where '.$where .'1=1';
  }
  $fieldstr = '';
  if(!empty($field)){
   
   foreach($field as $k=>$v){
    $fieldstr.= $v.',';
   }
    $fieldstr = rtrim($fieldstr,',');
  }その他{
   $fieldstr = '*';
  }
  self::$sql = "{$table} {$where} から {$fieldstr} を選択します";
  $result=mysql_query(self::$sql,$this->conn);
  $resuleRow = array();
  $i = 0;
  while($row=mysql_fetch_assoc($result)){
   foreach($row as $k=>$v){
    $resuleRow[$i][$k] = $v;
   }
   $i++;
  }
  $resuleRow を返す;
 }
 /**
* 記録を追加します
​*/
  パブリック関数挿入($table,$data){
   $values = '';
   $datas = '';
   foreach($data as $k=>$v){
    $values.=$k.',';
    $datas.="'$v'".',';
   }
   $values = rtrim($values,',');
   $datas = rtrim($datas,',');
   self::$sql = "INSERT INTO {$table} ({$values}) VALUES ({$datas})";
  if(mysql_query(self::$sql)){
   mysql_insert_id() を返す;
  }その他{
   false を返します;
  };
  }
  /**
* レコードを変更する
​*/
 パブリック関数 update($table,$data,$condition=array()){
  $where='';
  if(!empty($condition)){
   
   foreach($condition as $k=>$v){
    $where.=$k."='".$v."' および ";
   }
   $where='where '.$where .'1=1';
  }
  $updatastr = '';
  if(!empty($data)){
   foreach($data as $k=>$v){
    $updatastr.= $k."='".$v."',";
   }
   $updatastr = 'set '.rtrim($updatastr,',');
  }
  self::$sql = "更新 {$table} {$updatastr} {$where}";
  return mysql_query(self::$sql);
 }
 /**
* 記録を削除
​*/
  パブリック関数 delete($table,$condition){
   $where='';
  if(!empty($condition)){
   
   foreach($condition as $k=>$v){
    $where.=$k."='".$v."' および ";
   }
   $where='where '.$where .'1=1';
  }
  self::$sql = "{$table} {$where} から削除";
  return mysql_query(self::$sql);
  
  }
 
 パブリック静的関数 getLastSql(){
echo self::$sql;
}



}

$db = db::getInstance();
//$list = $db->select('demo',array('name'=>'tom','password'=>'ds'),array

('名前','パスワード'));
//echo $db->insert('demo',array('name'=>'最近そこにいました','password'=>'123'));
//echo $db->update('demo',array("name"=>'xxx',"password"=>'123'),array('id'=>1));
echo $db->delete('demo',array('id'=>'2'));
db::getLastSql();
echo "

";
?>

PHP には多くのデザイン パターンがありますが、その中でシングルトン パターンはコードを書くときによく使用されるパターンです。

新しい操作によるリソース消費を削減するのに十分な効果があり、特定のグローバル構成情報を簡単に制御できます。みなさんもphpを学んでいただければ幸いです

Xi Zhong はシングルトン パターンの適用を深く理解しています。

http://www.bkjia.com/PHPjc/628672.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/628672.html技術記事シングルトン モードは、開発と繰り返し呼び出しを簡素化するために設計された PHP の機能です。シングルトン モードの使用方法を詳しく紹介します。 1. シングルトンパターンのコンセプトはその名の通り...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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 行を追加することで作成できます。

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 は、

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

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

See all articles