


PHP オブジェクト指向プログラミング (oop) 学習メモ (1) - 抽象クラス、オブジェクト インターフェイス、instanceof、およびコントラクト プログラミング_PHP チュートリアル
1. PHPの抽象クラス
PHP 5 は抽象クラスと抽象メソッドをサポートします。抽象として定義されたクラスはインスタンス化できません。クラス内の少なくとも 1 つのメソッドが抽象宣言されている場合は、クラスを抽象宣言する必要があります。抽象として定義されたメソッドは、その呼び出しメソッド (パラメーター) を宣言するだけであり、その特定の関数の実装を定義することはできません。クラスは、宣言内で abstract 修飾子を使用することで抽象として宣言できます。
抽象クラスは基本クラスとして機能し、具体的な詳細は後続クラスに任せられることが理解できます。概念を抽象化することで、開発プロジェクトで拡張性の高いアーキテクチャを作成できます。
抽象クラス AbstractClass
{
コード...
}
1.1、抽象メソッド
抽象メソッドを定義するには、abstract キーワードを使用します。抽象メソッドは、アクセス レベル、関数キーワード、関数名、パラメータを含むメソッド プロトタイプ (メソッド本体がメソッド定義から削除された後のシグネチャ) のみを保持します。 ({}) や括弧内のコードは含まれません。たとえば、次のコードは抽象メソッド定義です:
abstract public functionprototypeName($protoParam);
抽象クラスを継承する場合、サブクラスは親クラスのすべての抽象メソッドを定義する必要があります。さらに、これらのメソッドのアクセス制御は親クラスのアクセス制御と同じ (またはより緩和された) 必要があります。さらに、メソッドを呼び出すメソッドは一致している必要があります。つまり、必要なパラメータの型と数が一致している必要があります。
1.2. 抽象クラスについて
クラスに少なくとも 1 つの抽象メソッドが含まれている限り、クラスは抽象クラスとして宣言する必要があります。
抽象として宣言されたメソッドには、実装時に同じかそれより低いアクセス レベルが含まれている必要があります。
new キーワードを使用して抽象クラスのインスタンスを作成することはできません。
抽象として宣言されたメソッドには関数本体を含めることはできません。
拡張クラスが抽象クラスとしても宣言されている場合、抽象クラスを拡張するときにすべての抽象メソッドを実装する必要はありません。 (クラスが抽象クラスから継承する場合、基本クラスで宣言されたすべての抽象メソッドを実装していない場合も、そのクラスを抽象として宣言する必要があります。)
1.3. 抽象クラスを使用する
抽象クラス Car
{
抽象関数 getMaxSpeend();
}
クラス Roadster extends Car
{
public $Speend;
public function SetSpeend($speend = 0)
{
{
$this-> ;Speend = $speend;
}
public function getMaxSpeend()
{
return $this->Speend;
}
}
class Street
{
public $Cars ;
public $SpeendLimit ;
function __construct( $speendLimit = 200)
{
$this -> SpeendLimit = $speendLimit;
$this -> Cars = array();
}
保護された関数 IsStreetLegal($car)
{
if ($car->getMaxSpeend() SpeendLimit)
{
return true;
}
else
{
return false;
}
}
public function AddCar($car)
{
if($this->IsStreetLegal($car))
{
echo 「車は道路の通行が許可されました。」;
$this ->Cars[] = $car;
}
else
{
echo '車は速すぎるため、道路の通行は許可されませんでした。';
}
}
}
$Porsche911 = newロードスター();
$Porsche911->SetSpeend(340);
$FuWaiStreet = 新しいストリート(80);
$FuWaiStreet->AddCar($Porsche911);
/**
*
* @result
*
* 車が速すぎるため、道路では許可されませんでした。[0.1 秒で終了]
*
*/
?>
2 .对オブジェクトインターフェイス
インターフェイスを使用すると、これらの方法を実行する必要がある特定の種類を指定できますが、これらの方法の具体的な内容を定義する必要はありません。
インターフェースはインターフェースに関連する文字によって定義され、1 つの規格を定義するようなものですが、その中ですべての方法が定義されます。
インターフェース内で定義されているすべての方法は必ず公開されている必要があり、これがインターフェースの特性です。インターフェイスは、このタイプの API を実装するために必要な方法を指定するために使用できるタイプの構造です。
ほとんどの開発者は、コード化および生成される文書内でそれを先頭として追加することを選択します。2.1インターフェース实现(実装)
1 つのインターフェイスを実装するには、implements オペレーターを使用します (継承抽象クラスでは拡張子を使用する必要があります)。クラス内で定義されているすべてのメソッドを実行する必要があり、1 つのインターフェイスが失敗する可能性があります。複数のインターフェースの名前。複数のインターフェイスを実行する場合、インターフェイス内のメソッドを重複させることはできません。
インターフェイスは、extends 演算子を使用することによっても受け入れられます。インターフェース内で常用量を設定することもできます。
复制代価
代価如下:
抽象クラス Car
{
抽象関数 SetSpeend($speend = 0);
}
インターフェース ISpeendInfo
{
function GetMaxSpeend();
}
クラス Roadster 拡張 Car 実装 ISpeendInfo
{
公開 $ Speend;
public function SetSpeend($speend = 0)
{
$this->Speend = $speend;
}
public function getMaxSpeend()
{
return $this->Speend;
}
}
クラスStreet
{
public $Cars ;
public $SpeendLimit ;
function __construct( $speendLimit = 200)
{
$this -> SpeendLimit = $speendLimit;
$this -> Cars = array();
}
保護された関数 IsStreetLegal($car)
{
if ($car->getMaxSpeend() SpeendLimit)
{
return true;
}
else
{
return false;
}
}
public function AddCar($car)
{
if($this->IsStreetLegal($car))
{
echo 「車は道路の通行が許可されました。」;
$this ->Cars[] = $car;
}
else
{
echo '車は速すぎるため、道路の通行は許可されませんでした。';
}
}
}
$Porsche911 = 新型ロードスター();
$Porsche911->SetSpeend(340);
$FuWaiStreet = 新しいストリート(80);
$FuWaiStreet->AddCar($Porsche911);
/**
*
* @result
*
* 車が速すぎるため、道路では許可されませんでした。[0.1 秒で終了]
*
* /
?>
3、型运算符インスタンス
instanceof 算数は PHP5 の比演算子です。適切な 2 つのパラメータを受け取り、ブール値を返します。
PHP の量が特定のクラスに属しているかどうかを確認する例検査オブジェクトが特定の種類のクラスに属しているかどうかを確認する例
検査オブジェクトが特定のクラスに属しているかどうかを確認する特定のインターフェースのオブジェクトの例を実現しました
$Porsche911 インスタンスの ISpeendInfo をエコー;//結果:1
4.契約プログラミング
Design by Contract または Design by Contract (DbC) は、コンピューター ソフトウェアを設計する方法です。この方法では、ソフトウェア設計者がソフトウェア コンポーネントの正式で正確な検証可能なインターフェイスを定義する必要があります。このようにして、事前条件、事後条件、および不変条件が従来の抽象データ型に追加されます。このメソッドの名前に使用されている「契約」または「契約」は、ビジネス契約の状況に似ているため、比喩です。
クラスを作成する前に、宣言されたインターフェイスを実装するプログラミングの練習。このメソッドは、クラスを確実にカプセル化するのに非常に役立ちます。コントラクト プログラミング手法を使用すると、建築家が建物を建てる前に青写真を描くのと同じように、アプリケーションを作成する前にビューの機能を定義できます。
5.概要
抽象クラスはabstractキーワードを使用して宣言されたクラスです。クラスを抽象としてマークすると、宣言されたメソッドの実装を延期できます。メソッドを抽象として宣言するには、すべての中括弧を含むメソッド エンティティを削除し、メソッドが宣言されているコード行をセミコロンで終了します。
抽象クラスは直接インスタンス化できず、継承する必要があります。
クラスが抽象クラスから継承する場合、基本クラスで宣言されたすべての抽象メソッドを実装していないときも、そのクラスを抽象として宣言する必要があります。
インターフェースでは、メソッド本体なしでメソッドのプロトタイプを宣言できます。これは抽象クラスに非常に似ています。それらの違いは、インターフェイスではメソッド本体を使用してメソッドを宣言できないことと、使用する構文も異なることです。クラスに検出ルールを強制するには、extends キーワードの代わりにimplements キーワードを使用する必要があります。
場合によっては、クラスが特定のクラスの型であるかどうか、または特定のインターフェイスを実装しているかどうかを判断する必要があります。このタスクには、instanceof が適しています。 instanceof は、インスタンスが特定の型であるかどうか、インスタンスが特定の型を継承しているかどうか、インスタンスまたはその祖先クラスがクラス固有のインターフェイスを実装しているかどうかという 3 つのことをチェックします。
一部の言語には複数のクラスから継承する機能があり、これは多重継承と呼ばれます。 PHP は多重継承をサポートしていません。このアイデアは、クラスに対して複数のインターフェイスを宣言する機能を提供するというものです。
インターフェイスは、クラスが従わなければならないルールを宣言するのに非常に役立ちます。契約に基づくプログラミング テクノロジは、この機能を使用してカプセル化を強化し、ワークフローを最適化します。

tomakephpapplicationsfaster、followthesesteps:1)useopcodecachinglikeopcacheTostoredscriptbytecode.2)最小化abasequeriesecachingingindexing.3)leveragephp7機能forbettercodeefficiency.4)

依存性注入(DI)は、明示的に推移的な依存関係によりPHPコードのテスト可能性を大幅に改善します。 1)DI分離クラスと特定の実装により、テストとメンテナンスが柔軟になります。 2)3つのタイプのうち、コンストラクターは、状態を一貫性に保つために明示的な式依存性を注入します。 3)DIコンテナを使用して複雑な依存関係を管理し、コードの品質と開発効率を向上させます。

DatabaseQueryoptimizationInpholvesseveralstrategESTOEnhancePerformance.1)selectonlynlynlyndorycolumnStoredatedataTransfer.2)useindexingtospeedupdataretrieval.3)revenmecrycachingtostoreres sultsoffrequent queries.4)

phpisusededemingemailsduetoitsbuilt-inmail()functionandsupportiveLibrarieslikephpmailerandswiftmailer.1)usethemail()functionforbasicemails、butithaslimitations.2)emploadforadvancedfeatureSlikelikelivableabableabuses.3)雇用

PHPパフォーマンスボトルネックは、次の手順で解決できます。1)パフォーマンス分析にXdebugまたはBlackfireを使用して問題を見つける。 2)データベースクエリを最適化し、APCUなどのキャッシュを使用します。 3)array_filterなどの効率的な関数を使用して、配列操作を最適化します。 4)bytecodeキャッシュ用のopcacheを構成します。 5)HTTP要求の削減や写真の最適化など、フロントエンドを最適化します。 6)パフォーマンスを継続的に監視および最適化します。これらの方法により、PHPアプリケーションのパフォーマンスを大幅に改善できます。

依存関係(di)inphpisadesignpatternativats anducesclassodulencies、拡張測定性、テスト可能性、および維持可能性。

cachingemprovesppperformancebystring of computationsorquickretrieval、還元装置の削減は、reducingerloadendenhancersponseTimes.efcectivestrategiesInclude:1)opcodecaching、compiledphpscriptsinmemorytoskipcompilation;


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

WebStorm Mac版
便利なJavaScript開発ツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール
