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

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

WBOY
WBOYオリジナル
2016-07-13 17:16:26784ブラウズ

シングルトン モードは、開発と繰り返しの呼び出しを簡素化するために設計された 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 までご連絡ください。