戦略パターン
戦略パターンはオブジェクトの動作パターンであり、一連のアルゴリズムをカプセル化することを目的としています。 。必要なアルゴリズムを動的に選択して使用します。
ストラテジモードとは、プログラムにおける意思決定制御を伴うモードを指します。この設計パターン自体の核となるアイデアはオブジェクト指向プログラミングのポリモーフィックなアイデアであるため、戦略パターンは非常に強力です。
戦略モードの 3 つの役割:
1.抽象的な戦略の役割
2.具体的な戦略的役割
3.環境の役割 (抽象的な戦略の役割への参照)
実装手順:
1.抽象ロール クラスを定義します (実装ごとに共通の抽象メソッドを定義します)
2.特定のストラテジークラスを定義します(親クラスの共通メソッドを具体的に実装します)
3.環境ロール クラスを定義する (抽象ロール変数をプライベートに宣言し、コンストラクターをオーバーロードし、抽象メソッドを実行する)
プログラミングの分野のすぐ外にも、Strategy パターンの例が多数あります。例:
朝、家から仕事に行く必要がある場合、いくつかの戦略を検討できます。地下鉄に乗る、バスに乗る、徒歩などの方法があります。各戦略は同じ結果を達成しますが、使用するリソースは異なります。
ストラテジ パターンのコード例:
<?phpabstract class baseAgent { //抽象策略类 abstract function PrintPage(); } //用于客户端是IE时调用的类(环境角色) class ieAgent extends baseAgent { function PrintPage() { return 'IE'; } } //用于客户端不是IE时调用的类(环境角色) class otherAgent extends baseAgent { function PrintPage() { return 'not IE'; } } class Browser { //具体策略角色 public function call($object) { return $object->PrintPage (); } } $bro = new Browser (); echo $bro->call ( new ieAgent () ); ?>
ファクトリ パターン
ファクトリ パターンは、最も一般的に使用されるインスタンス化オブジェクト パターンです。は、ファクトリ メソッドを使用して新しい操作を置き換えるモードです。
ファクトリ パターンを使用する利点は、インスタンス化されたクラス名などを変更したい場合に、ファクトリ メソッドの内容を変更するだけで済み、特定のインスタンス化を見つける必要がないことです。コード内の箇所 ( new ) が 1 つずつ変更されます。システム構造に柔軟な動的拡張メカニズムを提供し、結合を軽減します。
<?php header('Content-Type:text/html;charset=utf-8'); /** *简单工厂模式(静态工厂方法模式) */ /** * Interface people 人类 */ interface people { public function say(); } /** * Class man 继承people的男人类 */ class man implements people { // 具体实现people的say方法 public function say() { echo '我是男人<br>'; } } /** * Class women 继承people的女人类 */ class women implements people { // 具体实现people的say方法 public function say() { echo '我是女人<br>'; } } /** * Class SimpleFactoty 工厂类 */ class SimpleFactoty { // 简单工厂里的静态方法-用于创建男人对象 static function createMan() { return new man(); } // 简单工厂里的静态方法-用于创建女人对象 static function createWomen() { return new women(); } } /** * 具体调用 */ $man = SimpleFactoty::createMan(); $man->say(); $woman = SimpleFactoty::createWomen(); $woman->say();
シングル ケース モード
シングル ケース モードでは、クラスのインスタンスが 1 つだけ存在することが保証され、クラス自体がインスタンス化されてこのインスタンスが提供されます。システム全体に。
シングルトン モードは一般的な設計パターンであり、コンピュータ システムでは、スレッド プール、キャッシュ、ログ オブジェクト、ダイアログ ボックス、プリンタ、データベース操作、グラフィック カード ドライバがシングルトンとして設計されることがよくあります。
シングルトン モードには、遅延スタイル シングルトン、ハングリー スタイル シングルトン、および登録スタイル シングルトンの 3 種類があります。
シングルトン モードには次の 3 つの特徴があります。
1.インスタンスは 1 つだけ存在できます。
2.このインスタンスは自分で作成する必要があります。
3.このインスタンスは他のオブジェクトに提供する必要があります。
それでは、なぜ PHP シングルトン モードを使用するのでしょうか?
PHP の主要なアプリケーション シナリオの 1 つは、アプリケーションがデータベースを扱うシナリオです。アプリケーションでは、多数のデータベース操作が発生します。データベース ハンドルをデータベースに接続する動作については、 、シングルトン モードを使用すると、多数の新しい操作を回避できます。新しい操作が行われるたびにシステム リソースとメモリ リソースが消費されるためです。
class Single { private $name;//声明一个私有的实例变量 private function __construct(){//声明私有构造方法为了防止外部代码使用new来创建对象。 } static public $instance;//声明一个静态变量(保存在类中唯一的一个实例) static public function getinstance(){//声明一个getinstance()静态方法,用于检测是否有实例对象 if(!self::$instance) self::$instance = new self(); return self::$instance; } public function setname($n){ $this->name = $n; } public function getname(){ return $this->name; } } $oa = Single::getinstance(); $ob = Single::getinstance(); $oa->setname('hello world'); $ob->setname('good morning'); echo $oa->getname();//good morning echo $ob->getname();//good morning
登録モード
登録モードは、グローバル共有とオブジェクト交換を解決します。作成されたオブジェクトはグローバルに使用可能な配列上に保持され、必要に応じて配列から直接取得できます。オブジェクトをグローバルツリーに登録します。どこへでも直接訪問してください。
<?php class Register { protected static $objects; function set($alias,$object)//将对象注册到全局的树上 { self::$objects[$alias]=$object;//将对象放到树上 } static function get($name){ return self::$objects[$name];//获取某个注册到树上的对象 } function _unset($alias) { unset(self::$objects[$alias]);//移除某个注册到树上的对象。 } }
アダプター パターン
さまざまな完全に異なる機能インターフェイスを統合 API にカプセル化します。
PHP には MySQL、MySQLi、PDO の 3 つのデータベース操作があり、アダプター モードを使用して統合できるため、異なるデータベース操作を同じ API に統合できます。同様のシナリオには、memcache、redis、file、apc などのさまざまなキャッシュ機能を一貫したものに統合できるキャッシュ アダプターが含まれます。
最初にインターフェイスを定義します (いくつかのメソッドと対応するパラメーターを使用)。次に、いくつかの異なる状況がある場合は、インターフェースを実装するためのいくつかのクラスを作成するだけです。同様の機能を実行する機能を一貫したメソッドに統合します。
#接口 IDatabase <?php namespace IMooc; interface IDatabase { function connect($host, $user, $passwd, $dbname); function query($sql); function close(); }
MySQL
<?php namespace IMooc\Database; use IMooc\IDatabase; class MySQL implements IDatabase { protected $conn; function connect($host, $user, $passwd, $dbname) { $conn = mysql_connect($host, $user, $passwd); mysql_select_db($dbname, $conn); $this->conn = $conn; } function query($sql) { $res = mysql_query($sql, $this->conn); return $res; } function close() { mysql_close($this->conn); } }
MySQLi
<?php namespace IMooc\Database; use IMooc\IDatabase; class MySQLi implements IDatabase { protected $conn; function connect($host, $user, $passwd, $dbname) { $conn = mysqli_connect($host, $user, $passwd, $dbname); $this->conn = $conn; } function query($sql) { return mysqli_query($this->conn, $sql); } function close() { mysqli_close($this->conn); } }
オブザーバー パターン
1: オブザーバー パターン (オブザーバー) 、オブジェクトの状態が変化すると、そのオブジェクトに依存するすべてのオブジェクトが通知され、自動的に更新されます。
2: シナリオ: イベントの発生後、一連の更新操作を実行する必要があります。従来のプログラミング方法は、イベント コードの直後に処理ロジックを追加することです。更新されるロジックが増えると、コードの保守が困難になります。このメソッドは結合されており侵入的であるため、新しいロジックを追加するにはイベントのメイン コードを変更する必要があります。
3: オブザーバー パターンは、結合度が低く、非侵入的な通知および更新メカニズムを実装します。
イベント トリガーの抽象クラスを定義します。
EventGenerator.php <?php require_once 'Loader.php'; abstract class EventGenerator{ private $observers = array(); function addObserver(Observer $observer){ $this->observers[]=$observer; } function notify(){ foreach ($this->observers as $observer){ $observer->update(); } } }
オブザーバー インターフェイスの定義
Observer.php <?php require_once 'Loader.php'; interface Observer{ function update();//这里就是在事件发生后要执行的逻辑 } //一个实现了EventGenerator抽象类的类,用于具体定义某个发生的事件
実装:
require 'Loader.php'; class Event extends EventGenerator{ function triger(){ echo "Event<br>"; } } class Observer1 implements Observer{ function update(){ echo "逻辑1<br>"; } } class Observer2 implements Observer{ function update(){ echo "逻辑2<br>"; } } $event = new Event(); $event->addObserver(new Observer1()); $event->addObserver(new Observer2()); $event->triger(); $event->notify();
関連する推奨事項:PHP チュートリアル
以上が5 つの一般的な PHP 設計パターンの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

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

メモ帳++7.3.1
使いやすく無料のコードエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ホットトピック









