前回の記事「PHPのメモモードについて話そう」ではPHPのメモモードについて紹介しましたが、次の記事ではPHPのデザインパターンにおけるブリッジモードについて理解していきます。
ブリッジ モードは、プログラミングの世界では、実際には結合/集約と同義です。なぜそんなことを言うのですか?オブジェクト指向に精通している私たちは、継承のメリットをよく知っており、サブクラスは親クラスの多くの属性や機能を共有できます。ただし、継承には重大な結合という問題も伴います。親クラスの変更はサブクラスにある程度の影響を及ぼします。メソッドや属性の変更であっても、すべてのサブクラスでそれを変更する必要がある場合があります。これはオープンカプセル化の原則に違反します。ブリッジングはこの問題を解決するもので、利用可能なメソッドを共有するために組み合わせ/集約を使用することに重点を置いています。 PHP のトレイトについて考えたことがあると思いますが、仕事でこの機能を使用したことがあるなら、すでにブリッジ モードを使用していることになります。
Gof クラス図と説明
GoF 定義: 抽象部分を実装部分から分離し、独立して変更できるようにします。
#GoF クラス図
interface Implementor
{
public function OperationImp();
}
class ConcreteImplementorA implements Implementor
{
public function OperationImp()
{
echo '具体实现A', PHP_EOL;
}
}
class ConcreteImplementorB implements Implementor
{
public function OperationImp()
{
echo '具体实现B', PHP_EOL;
}
}
まず、実際に実行される機能である実装インターフェイスとその特定の実装を定義しましょう。アダプターパターンのAdapteのようなものです。
abstract class Abstraction { protected $imp; public function SetImplementor(Implementor $imp) { $this->imp = $imp; } abstract public function Operation(); } class RefinedAbstraction extends Abstraction { public function Operation() { $this->imp->OperationImp(); } }
抽象クラスのインターフェイスを定義し、実装への参照を維持します。特定の抽象クラスの実装メソッドでは、インターフェイスを実装する実際の操作メソッドを直接呼び出します。アダプター内のアダプターに似ています。
$impA = new ConcreteImplementorA(); $impB = new ConcreteImplementorB(); $ra = new RefinedAbstraction(); $ra->SetImplementor($impA); $ra->Operation(); $ra->SetImplementor($impB); $ra->Operation();
クライアントによって呼び出されたとき、抽象クラスはさまざまな実装クラスを使用して操作メソッドを多態性にすることができます。
ソース コードの説明では、このモードがアダプター モードと非常に似ていることがわかります。ただし、アダプターの目的は、無関係な 2 つのクラスが連携して中間変換作業を実行できるようにすることです。ブリッジングの目的は、メソッドの動作の継承結合を分離し、動作を簡単に追加、変更、および動的に呼び出すことにより、抽象インターフェイスと実装部分を独立して変更できるようにすることです。- そうすることで、抽象インターフェイスと実装部分は独立して変更できる これは、実装インターフェースへの参照が維持されている限り、実装インターフェースの特定の実装クラスは、異なる機能を備えた完全に異なるクラスにすることができ、自由に変更できることを意味します。それが何であるかは実装に決定させてください。
- ブリッジ モードの利点: インターフェイスとその実装部分の共有、スケーラビリティの向上、実装の詳細が顧客に透過的になる
- ブリッジ モードによって解決される主な問題は、システムの継続的な成長によって引き起こされます。継承 密結合問題
- 合成と集約: 集約は弱い関係です。A には B が含まれますが、B は A の一部ではありません。組み合わせは強い関係です。A には B が含まれ、B も A の一部です。 、全体と部分の関係
#完全なコード: https://github.com/zhangyue0503/designpatterns-php/blob/master/18.bridge/source/bridge.php
##例
SMS 送信はブリッジを使用して実装することもできます。多数のテキスト メッセージ テンプレートがあり、さまざまなテキスト メッセージ プロバイダーを使用してテキスト メッセージを送信するとします。このとき、ブリッジモードを使用してさまざまな組み合わせを形成できます。
SMS 送信クラス図
完全なソース コード: https://github.com/zhangyue0503/designpatterns- php /blob/master/18.bridge/source/bridge-message.php
<?php interface MessageTemplate { public function GetTemplate(); } class LoginMessage implements MessageTemplate { public function GetTemplate() { echo '您的登录验证码是【AAA】,请不要泄露给他人【XXX公司】!', PHP_EOL; } } class RegisterMessage implements MessageTemplate { public function GetTemplate() { echo '您的注册验证码是【BBB】,请不要泄露给他人【XXX公司】!', PHP_EOL; } } class FindPasswordMessage implements MessageTemplate { public function GetTemplate() { echo '您的找回密码验证码是【CCC】,请不要泄露给他人【XXX公司】!', PHP_EOL; } } abstract class MessageService { protected $template; public function SetTemplate($template) { $this->template = $template; } abstract public function Send(); } class AliYunService extends MessageService { public function Send() { echo '阿里云开始发送短信:'; $this->template->GetTemplate(); } } class JiGuangService extends MessageService { public function Send() { echo '极光开始发送短信:'; $this->template->GetTemplate(); } } // 三个短信模板 $loginTemplate = new LoginMessage(); $registerTemplate = new RegisterMessage(); $findPwTemplate = new FindPasswordMessage(); // 两个短信服务商 $aliYun = new AliYunService(); $jg = new JiGuangService(); // 随意组合 // 极光发注册短信 $jg->SetTemplate($registerTemplate); $jg->Send(); // 阿里云发登录短信 $aliYun->SetTemplate($loginTemplate); $aliYun->Send(); // 阿里云发找回密码短信 $aliYun->SetTemplate($findPwTemplate); $aliYun->Send(); // 极光发登录短信 $jg->SetTemplate($loginTemplate); $jg->Send(); // ......
説明
これは集約モードです。テンプレートは SMS 送信の一部ではありません。テンプレートを使用せずに直接送信できます。これらには強い関係はありません。
SMS 送信方法を変更する必要はありません。別の SMS テンプレートを渡すだけで済みます。- #is-a 関係でなければならないかどうかわからない場合は、ブリッジ モードなどの結合/集約設計手法を使用することをお勧めします。現在のクラス関係は is-a です。その場合は、ためらわずに継承を使用してください。
- 元のアドレス: https://juejin.cn/post/6844903986655395848
- 著者:ハードコアプロジェクトマネージャー
推奨学習: 「PHP ビデオ チュートリアル 」
以上がPHP のブリッジ モードについての簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

絶対セッションのタイムアウトはセッションの作成時に開始され、アイドルセッションタイムアウトはユーザーの操作なしに開始されます。絶対セッションタイムアウトは、金融アプリケーションなど、セッションライフサイクルの厳格な制御が必要なシナリオに適しています。アイドルセッションタイムアウトは、ソーシャルメディアなど、ユーザーが長い間セッションをアクティブに保つことを望んでいるアプリケーションに適しています。

サーバーセッションの障害は、手順に従って解決できます。1。セッションが正しく設定されていることを確認するために、サーバーの構成を確認します。 2.クライアントCookieを確認し、ブラウザがそれをサポートしていることを確認し、正しく送信します。 3. Redisなどのセッションストレージサービスを確認して、それらが正常に動作していることを確認します。 4.アプリケーションコードを確認して、正しいセッションロジックを確認します。これらの手順を通じて、会話の問題を効果的に診断および修復し、ユーザーエクスペリエンスを改善することができます。

session_start()iscrucialinphpformangingusersions.1)itInitiateSanewsessionifnoneExists、2)resumesanexistingsession、および3)SetSessionCookieforcontinuityAcrossRequests、ApplicationslicationSliviseSlikeUserauthicationAnticatent。

HTTPonlyフラグを設定することは、XSS攻撃を効果的に防止し、ユーザーセッション情報を保護することができるため、セッションCookieにとって重要です。具体的には、1)HTTPONLYフラグは、JavaScriptがCookieにアクセスするのを防ぎます。2)Flagは、PHPとFlaskのSetCookiesとMake_Responseを介して設定できます。

phpsessionssolvetheprobrof of maintainsea crossmultiplehttprequestsbyStoringdataontaonsociatingitiTauniquesessionid.1)それらは、通常はヨーロッパの側面、および一般的には、測定されている

phpssionscanStorestrings、numbers、arrays、andobjects.1.strings:textdatalikeusernames.2.numbers:integersorfloatsforcounters.3.arrays:listslikeshoppingcarts.4.objects:complextructuresthataresialized。

tostartaphpsession、outsession_start()atthescript'sbeginning.1)placeitbe foreanyouttosetthesscookie.2)usesionsionsionsionserdatalikelogintatussorshoppingcarts.3)再生セッションインドストップレベントフィックスアタック

セッション再生とは、新しいセッションIDを生成し、セッション固定攻撃の場合にユーザーが機密操作を実行するときに古いIDを無効にすることを指します。実装の手順には次のものが含まれます。1。感度操作を検出、2。新しいセッションIDを生成する、3。古いセッションIDを破壊し、4。ユーザー側のセッション情報を更新します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
