検索

PHP パターン設計 シングルトン パターン

パターン設計とは何ですか?初心者は最初はこの高尚な名前に怖気づくでしょう。豊富なプログラミング経験を持つベテランにとって、パターン設計はあらゆるところで行われます。多くの連絡先フレームワークは、さまざまなパターンに基づいて設計されています。 簡単に言うと、コードを書く過程で最初によく触れるのは、プロセス指向の単純かつ基本的なプログラミングです。このとき、私たちがよく追求するのは、コードが特定の機能を達成できればすべてがうまくいくということです。機能を達成できれば、コードがどれほど冗長であっても、再利用可能であっても、効率的であっても関係ありません。ただし、実際に実際に適用され、誰もがより採用しているのは、効率的で再利用可能で、チーム開発が容易なコードです。これらを踏まえると、練習のように気軽に関数名を付けたり、スクリプトを配置したりすることはできません。パターン設計の指示は、コードを整理し、再利用可能なコードを実現し、他の人がコードを理解しやすくし、コードの信頼性を確保するためのアイデアを提供します。

すべてのパターン設計には、シングルトン パターン、ファクトリー パターン、レジストレーション ツリー パターンの 3 つの基本的なパターンがあります。今日はシングルトン パターンをベースにしています。

シングルトンパターンとは何ですか?

この名前に基づいて、シングルトン パターンがアプリケーション全体でオブジェクト インスタンス 1 つだけ存在する設計パターンを指すことが容易に理解できます。

シングルトン パターンを使用する理由

php は頻繁にデータベースを処理します。アプリケーションが接続オブジェクトを頻繁に確立し、新しい操作を実行すると、Aniseed が消費されます。システム メモリ リソース、これは私たちが見たいものではありません。さらに、チーム協力プロジェクトでは、シングルトン モードにより、さまざまなプログラマが独自のオブジェクトを新しく作成し、人為的なシステム消費を引き起こすことを効果的に防ぐことができます。

シングルトン パターンを作成するには?

この問題を見ると、優れたプログラマは先人の経験を待つのではなく、要件に応じてシングルトン パターンを作成しようとする可能性が高いと思います。シングルトン パターンとはどのようなパターンかを説明する他のブロガーとは異なり、オブジェクト指向プログラミングの基本的な経験がある皆さんと一緒にシングルトン パターンを自分で構築する方法について考えることを好みます。

まずタイトルから始めましょう。 シングルトン パターンは、 に 1 つのオブジェクト インスタンス のみが含まれる設計パターンです。これはとても苦痛です。私たちが通常作成するクラスは、多くのオブジェクトを作成できるか、オブジェクトを作成できない (抽象クラス) かのどちらかです。オブジェクトを作成するにはクラスが必要ですが、それを抽象クラスにすることはできません。このクラスは、他の人が関数を複数回作成するのを防ぐためのものです。当然、コンストラクターから始めることを検討しました。ただし、新しい操作ごとにコンストラクターが呼び出されるため、オブジェクト インスタンスが複数回作成されることになります。これは当初の設計意図に反しています。この問題を解決するには、ここで必ずコンストラクターを private または protected として宣言してください。

コンストラクターが private または protected として宣言されている場合、新しいメソッドを通じてインスタンス オブジェクトを作成できなくなります。そして、この処理ステップの後、問題解決の見通しが明確になったことがわかりました。なぜ?新しいメソッドを通じてオブジェクト インスタンスを作成できないため、クラス内のメソッドを通じてのみオブジェクト インスタンスを作成できます。 現時点では、鶏が先か卵が先かという興味深い問題に直面しています。オブジェクトを作成した後にそのオブジェクトのメソッドを呼び出すことがよくありますが、このときはクラス内のメソッドを呼び出してオブジェクトを作成する必要があります。オブジェクトが作成されたかどうかに関係なく呼び出すことができるメソッドの解決策は、間違いなくキーワード --static を使用することです。

クラス内に静的メソッドを作成すると何が実現しますか?トピックに戻ります。インスタンス オブジェクトは 1 つだけ作成するようにしてください。 1 つだけであることを確認するにはどうすればよいでしょうか?これは非常に簡単です。ただ判断するだけです。存在する場合は直接返します。存在しない場合は、自分で作成します。もちろん、このインスタンス オブジェクトはクラスの静的プロパティです。この時点で、シングルトン モードで必要な機能が実装されます。本当に完成してるのかな~ まだこのクラスを継承する場合、コンストラクターをpublic宣言するのはダメなのでしょうか?次に、コンストラクター メソッドの前に Final キーワードを追加する必要があります。

最後に、シングルトン モードのコードを貼り付けます。コードの説明はすべて上にあります~~

<span style="color: #000000;">php</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Single{    </span><span style="color: #0000ff;">public</span> <span style="color: #800080;">$hash</span><span style="color: #000000;">;    </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">protected</span> <span style="color: #800080;">$ins</span>=<span style="color: #0000ff;">null</span><span style="color: #000000;">;    </span><span style="color: #0000ff;">final</span> <span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> __construct(){        </span><span style="color: #800080;">$this</span>->hash=<span style="color: #008080;">rand</span>(1,9999<span style="color: #000000;">);    }    </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> getInstance(){        </span><span style="color: #0000ff;">if</span> (self::<span style="color: #800080;">$ins</span><span style="color: #000000;"> instanceof self) {            </span><span style="color: #0000ff;">return</span> self::<span style="color: #800080;">$ins</span><span style="color: #000000;">;        }        self</span>::<span style="color: #800080;">$ins</span>=<span style="color: #0000ff;">new</span><span style="color: #000000;"> self();        </span><span style="color: #0000ff;">return</span> self::<span style="color: #800080;">$ins</span><span style="color: #000000;">;    } }</span>

シングルトン モード自体は複雑ではありませんが、次のことが必要です。 -深い理解。多くの初心者はまだため息をつきます: くそったれ、コンストラクターは常にパブリックであるとは限りません~ くそったれ、new を使用せずにオブジェクトを作成できます~ 実際、作成者は、コンストラクターが public、private、または protected として宣言されているかどうかに関係なく、オブジェクトは最終的に作成されるたびに呼び出されます。 New はオブジェクト インスタンスの作成に常に使用されます。シングルトン モードでもオブジェクトの作成に new が使用されますが、場所がクラスの外側からクラスの内側に変更されるだけです。

最後に、さまざまな絶妙なパターン設計を開発したプログラマーに敬意を表したいと思います~~

シリーズ記事:

phpパターンデザインのシングルトンパターン

phpパターンデザインのファクトリーパターン

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPでインターフェイスをどのように作成して使用しますか?PHPでインターフェイスをどのように作成して使用しますか?Apr 30, 2025 pm 03:40 PM

この記事では、PHPでインターフェイスを作成、実装、および使用する方法について説明し、コード組織と保守性の利点に焦点を当てています。

crypt()とpassword_hash()の違いは何ですか?crypt()とpassword_hash()の違いは何ですか?Apr 30, 2025 pm 03:39 PM

この記事では、PHPのCrypt()とpassword_hash()の違いについて、パスワードハッシュの違いについて説明し、最新のWebアプリケーションの実装、セキュリティ、および適合性に焦点を当てています。

PHPのクロスサイトスクリプト(XSS)をどのように防ぐことができますか?PHPのクロスサイトスクリプト(XSS)をどのように防ぐことができますか?Apr 30, 2025 pm 03:38 PM

記事では、入力検証、出力エンコード、およびOWASP ESAPIやHTML浄化器などのツールを使用して、PHPのクロスサイトスクリプト(XSS)を防止します。

PHPの自動装置は何ですか?PHPの自動装置は何ですか?Apr 30, 2025 pm 03:37 PM

PHPでのオートローディングは、必要に応じてクラスファイルを自動的にロードし、メモリの使用を削減し、コード組織を強化することでパフォーマンスを向上させます。ベストプラクティスには、PSR-4の使用とコードを効果的に整理することが含まれます。

PHPストリームとは何ですか?PHPストリームとは何ですか?Apr 30, 2025 pm 03:36 PM

PHPストリームは、一貫したAPIを介したファイル、ネットワークソケット、圧縮形式などのリソースの処理を統合し、複雑さを抽象化し、コードの柔軟性と効率を高めます。

PHPを使用してアップロードできるファイルの最大サイズはどれくらいですか?PHPを使用してアップロードできるファイルの最大サイズはどれくらいですか?Apr 30, 2025 pm 03:35 PM

この記事では、PHPでファイルアップロードサイズの管理を管理し、2MBのデフォルト制限とPHP.ini設定を変更してそれを増やす方法に焦点を当てています。

PHPのめまいの種類とは何ですか?PHPのめまいの種類とは何ですか?Apr 30, 2025 pm 03:34 PM

この記事では、PHP 7.1で導入されたPHPのヌル可能なタイプについて説明し、変数またはパラメーターが指定されたタイプまたはnullのいずれかを可能にします。読みやすさの改善、タイプの安全性、明示的な意図などの利点を強調し、宣言する方法を説明します

unset()とlink()関数の違いは何ですか?unset()とlink()関数の違いは何ですか?Apr 30, 2025 pm 03:33 PM

この記事では、プログラミングのunset()とlink()関数の違いについて説明し、目的とユースケースに焦点を当てています。 unset()はメモリから変数を削除しますが、link()はファイルシステムからファイルを削除します。どちらもEFFECにとって重要です

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。