PHPにSingletonパターンを実装するには、インスタンスを1つの「単一」インスタンスに制限するクラスを作成することが含まれます。これは、直接インスタンス化を防ぐためのプライベートコンストラクター、単一のインスタンスを返す静的な方法、およびインスタンスを保持するためのプライベート静的変数です。これが例です:
<🎝🎝🎝>このコードは、コア要素、プライベートコンストラクター、静的getInstance()
メソッド、および単一のインスタンスを保持するための静的変数を示しています。 __clone()
および__wakeup()
メソッドは、クローニングと非正規化を防ぎ、シングルトンの制約をさらに実施します。
利点:
短所:
PHPのマルチスレッド機能は、Javaのような言語と比較して制限されています。マルチスレッドPHP環境の真のスレッドの安全性(たとえば、PTHREADSの使用)には、慎重な同期メカニズムが必要です。ただし、リクエストが個別のプロセスによって処理されるほとんどの典型的なPHP Webアプリケーションシナリオでは、通常、上記の単純なSingletonの実装で十分です。各リクエストは通常、独自のプロセススペースで実行されるため、並行性の問題は低くなります。
PHPでマルチスレッド環境を使用している場合(あまり一般的ではありません)、 getInstance()
メソッドを保護するために同期プリミティブを使用する必要があります。これには、MutexesまたはSemaphoresを使用して、1つのスレッドのみが一度に$instance
変数にアクセスできるようにすることが含まれます。このためのPHPの組み込みメカニズムは限られており、より堅牢なスレッドサポートを提供する拡張機能またはライブラリを探索する必要があるかもしれません。スピンロックなどのより洗練されたロックメカニズムの使用は、高い集団通貨の状況で最適なパフォーマンスに必要である可能性があります。
はい、シングルトンパターンのいくつかの選択肢は、より良い柔軟性と保守性を提供します。
最良の代替案は、プロジェクトの特定の要件に依存します。ほとんどの場合、依存性噴射は一般に、そのテスト可能性の向上とカップリングの削減に適しています。最も適切なソリューションを選択する前に、各アプローチのトレードオフを慎重に検討してください。
以上がPHPにシングルトンパターンを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。