概要
シングルトン パターンとは何ですか?
クラスが 1 つのオブジェクト (またはインスタンス) のみを作成できる場合、このクラスはシングルトン クラスです。この設計パターンは、シングルトン デザイン パターン、または略してシングルトン パターンと呼ばれます。
シングルトンを使用する理由
# リソース アクセスの競合を処理します。
例: ログをファイルに出力する機能。
#実装方法
PHP のシングルトンモードを実装するには 3 つの手順が必要です* クラスを保存するために使用される静的メンバー変数。
* オブジェクトの作成または複製を防止するには、__construct と __clone をプライベートとして宣言する必要があります。
* このインスタンスにアクセスするためのパブリック静的メソッド。通常は getInstance
class single { private static $instance ; private function __construct(){} private function __clone(){} public static function getInstance() { if (empty(self::$instance)) { self::$instance = new single(); } return self::$instance; } }
class single { private $id = 0; private static $instance ; private function __construct(){} private function __clone(){} public static function getInstance() { if (empty(self::$instance)) { self::$instance = new single(); } return self::$instance; } public function getId() { return $this->id++; } }
これは本当に完璧ですが、マルチスレッドの場合はどうなるのでしょうか?
スレッドの唯一の単一インスタンスの実装
php、nts の ts バージョンと nts バージョンの違いについて言及する必要があります。 (非スレッドセーフ) シングルスレッド構造、スレッド間でキャッシュデータを共有。 ts (スレッド セーフ) はマルチスレッド機能を備えて構築されており、複数のスレッド間で異なるデータ コピーを使用します。
php の ts バージョンを使用して、スレッド セーフ モードに自動的にアップグレードします。pthreads 拡張機能は、php の ts バージョンにのみインストールできます。
pecl に含まれる pthreads の最後のバージョンは php7.0 に基づいています。github の pthreads プロジェクトも更新を停止しました。興味がある場合は、7.0 にアクセスするだけで履歴を見逃すことができます。
pthreads 拡張機能を php-7.0.9-Win32-VC14-x64 バージョンにインストールしました。
マルチスレッドの場合、シングルトンのスコープはプロセスのみからスレッドのみに変わります。
require 'single.php'; class Request extends Thread { public $url; public function __construct($url) { $this->url = $url; } public function run() { echo single::getInstance()->getId(); echo "\n"; } } $chG = new Request("www.google"); $chG ->start(); $chG->join(); echo $chG->getThreadId(); echo "\n"; $chB = new Request("www.baidu"); $chB ->start(); $chB->join(); echo $chB->getThreadId(); echo "\n";
PHP のシングルトン モードを実装するには 3 つの手順が必要です
私は PHP でマルチスレッドを使用したことがありません。それはもう後戻りできないことのようです。みんながどう思うかわかりません。
以上が【デザインパターン】PHPシングルトンパターンの応用シナリオと実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。