PHP デザイン パターン (2): 抽象クラスとインターフェイス
元のアドレス: PHP デザイン パターン (2): 抽象クラスとインターフェイス
はじめに
プログラミングにとって、物事の抽象化はありふれたトピックであり、抽象的な問題はオブジェクト指向プログラミングとプログラムにさらに役立ちます。デザインモデル。 C/C++、Java、Python、その他の言語と同様に、PHP もオブジェクト指向をサポートしますが、若干の違いがあります。たとえば、PHP はインターフェイスでの定数の定義をサポートしますが、抽象変数はサポートしません。
抽象化
物事の抽象化とは、2 つの異なる物事の間の本質的な特徴を区別することを指します。これら 2 つの物事は、特定の観点から明確な境界を持つ必要があります。
例えば、クジラとコイは、動物の観点からは明確な区別があり、異なる動物に属しますが、水生動物の観点からは、それらは同じ動物の抽象化に属します。
問題を適切に抽象化し、モデルを構築すると、プログラミングによる問題の解決が容易になります。
覚えておいてください: 抽象化は、問題を解決するためのプログラミングの基礎です。問題が複雑になるほど、コードを直接記述するのではなく、最初から問題を抽象化する必要があります。
抽象クラス/抽象クラス
抽象クラスは、PHP では抽象クラスと呼ばれるプログラミングの概念です。デザイン パターンでは、抽象クラスをインスタンス化/初期化することはできませんが、具象クラスからの継承に依存することで実現できます。なんだか抽象的ですよね?コードを使用して説明します。
<?phpabstract class Animal { public $name; abstract public function eat($food);}?>
は、動物の抽象クラスを定義します。動物の属性は名前であり、食べ物を食べるメソッドがあります。
Animal はなぜ抽象クラスなのでしょうか?なぜなら、動物種は自然界に存在するものではなく、人間の思考から抽象化されたものだからです。自然界に存在するのは、クジラやコイのような決定的な動物です。
たとえば、クジラの概念は動物に属し、Animal クラスを継承する必要があります。クジラ クラスと食べるメソッドを定義します。
<?phpclass Whale extends Animal { public function __construct() { $this->name = "Whale"; } public function eat($food) { echo $this->name . " eat " . $food . ".\n"; }}?>
これで、クジラ クラスを初期化し、食べるメソッドを呼び出すことができます。
<?php $whale = new Whale(); $whale->eat("fish");?>
$ php Whale.phpWhale eat fish.
PHP は、プロセス指向プログラミングの概念でインターフェースもサポートしています。以下もクジラの例を使用して説明します。
<?phpinterface IAction { public function eat($food); public function swim();}?>
<?phpclass Whale implements IAction { public function eat($food) { echo "Whale eat " . $food . "\n."; } public swim() { echo "Whale is swimming.\n"; }}?>
<?php $whale = new Whale(); $whale->eat("fish");?>
$ php Whale.phpWhale eat fish.
上記の抽象クラスとインターフェイスの例は似ていますか?実際、PHP プログラミングの場合、抽象クラスが実装できる関数はインターフェイスによって実装することもできます。
抽象クラスのインターフェイスの違いは、プログラミングの実装ではなく、プログラミングの設計パターンにあります。
一般的に言えば、抽象化はさまざまなことに使用され、インターフェースは物事の動作に使用されます。
例: 水生生物はクジラの抽象的な概念ですが、水生生物はクジラの行動ではなく、食べることはクジラの行動です。
大規模なプロジェクトの場合、オブジェクトは基本的な抽象クラスからの継承によって実装され、これらのクラスのメソッドは通常、インターフェイスによって定義されます。
さらに、物事の属性を変更する場合は、直接割り当てや他のメソッドの代わりにインターフェイスを使用することをお勧めします。次のようなものです:
<?phpinterface IAction { public function eat();}class Whale implements IAction { public function eat() { echo "Whale eat fish.\n"; }}class Carp implements IAction { public function eat() { echo "Carp eat moss.\n"; }}class Observer { public function __construct() { $whale = new Whale(); $carp = new Carp(); $this->observeEat($whale); $this->observeEat($carp); } function observeEat(IAction $animal) { $animal->eat(); }}$observer = new observer();?>
$ php Observer.phpWhale eat fish.Carp eat moss.
良い設計パターンは厳密に抽象化することです問題は、抽象クラスとインターフェイスはプログラミング実装では似ていますが、プログラミング パターンでは異なります。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

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

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

ホットトピック









JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。
