PHP デザインパターン (1)

WBOY
WBOYオリジナル
2016-08-08 09:33:101141ブラウズ

PHP プログラムをコーディングする場合、将来的にコードをより良く保守し、理解するために、いくつかの適切なデザイン パターンを使用することが不可欠です。エラーや不適切な箇所があれば、まずシングルトン パターンを共有したいと思います。 PHPer がそれを指摘してくれると助かります。

  • 単一ケースパターン

PHP におけるオブジェクトの存続期間は、スクリプトの開始からスクリプトの終了までであるため、PHP のシングルトン モードでは、1 ページ内でオブジェクトが複数回のみ使用されます (ページには 1 つのページではなく、他の多くのページが含まれる可能性があります)。狭義) 複数回使用される場合にのみ機能し、新しいオブジェクトは繰り返されず (複数人でプロジェクトに取り組んでいる場合、1 つのリクエストでオブジェクトが複数回インスタンス化されることは避けられません)、不要なリソースが発生します。 (データ コントロール接続操作の効果は非常に明白です)、もう 1 つの点は、スクリプト全体が同じオブジェクトであることを保証できることです。このモードはどのように実装されているのでしょうか。注意すべき点がいくつかあります。実装:

1. 最初に、__construct() メソッドをプライベート メソッドとして定義します。これにより、シングルトン モードは外部からインスタンス化できませんが、内部的にはインスタンス化できます。

2. クラス外からのクローン作成を防ぐために __clone() メソッドもシールドします

2. 次に、インスタンスの保存に使用するプライベート変数と、プライベート変数を取得するパブリック関数 getInstance() を定義します。

リーリー リーリー リーリー リーリー リーリー リーリー

これらの理論を言うだけでは説得力がありません具体的な効果の違いを見てみましょう。

リーリー

最初のコメント

$obj[$i] = Singlemodel::testTwo();この行は、シングルトン モードを使用すると、次の結果を取得できます

その後、

$obj[$i] = Singlemodel::testOne(); をコメントアウトし、非シングルトンモードを使用すると、次の結果が得られます

見られます

100 テスト単一ケースパターンノーマルモード通常/単一ケース(回)メモリ(バイト)1438168473765.89時間0.01125190.254138922.595つのテストバイト1404321689841.20す0.01126120.01731101.54
スクリプトによって実行されるリンクの数が 100 の場合、シングルトン モードのパフォーマンスは、メモリ使用量の点で通常モードよりもほぼ 6 倍向上し、接続数の点ではほぼ 23 倍高速であることがわかります。シングルトン モードで消費されるメモリと時間は基本的に変化せず、非シングルトン モードでは増加し続けるため、倍数は大きくなります。モードでは、リンクの数がある程度増加すると、エラー「mysqli_connect(( ): (08004/1040): Trop de connexions in」が発生します。これは、同時接続が多すぎることを意味します。テストのために、次のコマンドを使用して mysql 接続の最大数を設定すると、エラーが報告される理由がわからないため、これに注意する必要があります。

リーリー

この時点で、自分でテストしてみると、接続数が比較的少ない場合、その差は比較的小さいことがわかります (上記の 1 つのリクエストに 5 つの接続がある場合と同様)。 1 回のリクエストで多くのインスタンス化を実現するには小さいということですが、これはもちろん効果がありません。第一に、これにより、複数のインスタンス化が回避され、さらにリソースの消費が削減されます。この 10ms のレベル差は、同時システムでも役立ちます。それを使用することで多くの利点があります。

シングルトンパターンについてはここまでです。次回は他のデザインパターンについて説明します。何か間違っている場合は、メッセージまたはメールでご指摘ください。

送ってください~

以上、PHPのデザインパターン(1)を内容も含めて紹介しましたが、PHPチュートリアルに興味のある方の参考になれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。