シングルトンパターン: クラスのオブジェクトをシステム内の唯一のインスタンスにします。
PHP におけるシングルトン モードの最も一般的な用途はデータベース操作です。システム内で複数のデータベース接続操作が行われてシステム リソースが浪費されることを避けるために、シングルトン モードを使用できます。データベース操作ごとに 1 つのインスタンスが使用されます。
簡単な例
クラス AClass {// 独自のインスタンスを保存するために使用されます
パブリック静的 $instance;
// 外部オブジェクトによるオブジェクトのインスタンス化を防ぐためのプライベート コンストラクター
プライベート関数 __construct() {}
//外部オブジェクトの複製を防ぐプライベートクローン関数
プライベート関数 __clone() {}
// 静的メソッド、シングルトンアクセス統合入口
パブリック静的関数 getInstance() {
if (!(self::$instanceinstanceofself)){
self::$instance = new self();
}
self::$instance を返す;
}
// テスト
パブリック関数test() {
「完了」を返します;
}
//外部オブジェクトの複製を防ぐプライベートクローン関数
プライベート関数 __clone() {}
}
クラスBClassはAClassを拡張します{
}
// インスタンスを取得します
$aclass = AClass::getInstance();
$bclass = BClass::getInstance();
// メソッドの呼び出し
echo $aclass->test();
一部の比較的大規模なアプリケーションでは、複数のデータベースが接続される可能性があるため、共通のオブジェクトを共有する異なるデータベースによって、接続ハンドルの割り当てなどの問題が発生する可能性があります。 $instance を配列に変更し、異なるパラメーターを使用することができます
。
簡単な例
クラス DB {// 独自のインスタンスを保存するために使用されます
public static $instance = array();
パブリック $conn;
// 外部オブジェクトによるオブジェクトのインスタンス化を防ぐためのプライベート コンストラクター
プライベート関数 __construct($host, $username, $password, $dbname, $port) {
$this->conn = new mysqli($host, $username, $password, $dbname, $port);
}
// 静的メソッド、シングルトンアクセス統合入口
パブリック静的関数 getInstance($host, $username, $password, $dbname, $port) {
$key = $host.":".$port;
if (!(self::$instance[$key]instanceofself)){
self::$instance[$key] = new self($host, $username, $password, $dbname, $port);#instantiation
}
return self::$instance[$key];
}
//クエリ
パブリック関数クエリ($ql) {
return $this->conn->query($sql);
}
//外部オブジェクトの複製を防ぐプライベートクローン関数
プライベート関数 __clone() {}
//リソースを解放する
パブリック関数 __destruct(){
$this->conn->close();
}
}