ホームページ バックエンド開発 PHPチュートリアル PHP オブジェクト指向プログラミング (oop) 学習メモ (1) - 抽象クラス、オブジェクト インターフェイス、instanceof、およびコントラクト プログラミング_PHP チュートリアル

PHP オブジェクト指向プログラミング (oop) 学習メモ (1) - 抽象クラス、オブジェクト インターフェイス、instanceof、およびコントラクト プログラミング_PHP チュートリアル

Jul 13, 2016 am 10:28 AM
instanceof 抽象クラス

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() < $this -> 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() < $this -> 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 の量が特定のクラスに属しているかどうかを確認する例

検査オブジェクトが特定の種類のクラスに属しているかどうかを確認する例
検査オブジェクトが特定のクラスに属しているかどうかを確認する特定のインターフェースのオブジェクトの例を実現しました

复制代価代価如下:
echo $Porsche911 instanceof Car;
//結果:1

$Porsche911 インスタンスの ISpeendInfo をエコー;//結果:1


4.契約プログラミング

Design by Contract または Design by Contract (DbC) は、コンピューター ソフトウェアを設計する方法です。この方法では、ソフトウェア設計者がソフトウェア コンポーネントの正式で正確な検証可能なインターフェイスを定義する必要があります。このようにして、事前条件、事後条件、および不変条件が従来の抽象データ型に追加されます。このメソッドの名前に使用されている「契約」または「契約」は、ビジネス契約の状況に似ているため、比喩です。

クラスを作成する前に、宣言されたインターフェイスを実装するプログラミングの練習。このメソッドは、クラスを確実にカプセル化するのに非常に役立ちます。コントラクト プログラミング手法を使用すると、建築家が建物を建てる前に青写真を描くのと同じように、アプリケーションを作成する前にビューの機能を定義できます。

5.概要

抽象クラスはabstractキーワードを使用して宣言されたクラスです。クラスを抽象としてマークすると、宣言されたメソッドの実装を延期できます。メソッドを抽象として宣言するには、すべての中括弧を含むメソッド エンティティを削除し、メソッドが宣言されているコード行をセミコロンで終了します。

抽象クラスは直接インスタンス化できず、継承する必要があります。

クラスが抽象クラスから継承する場合、基本クラスで宣言されたすべての抽象メソッドを実装していないときも、そのクラスを抽象として宣言する必要があります。

インターフェースでは、メソッド本体なしでメソッドのプロトタイプを宣言できます。これは抽象クラスに非常に似ています。それらの違いは、インターフェイスではメソッド本体を使用してメソッドを宣言できないことと、使用する構文も異なることです。クラスに検出ルールを強制するには、extends キーワードの代わりにimplements キーワードを使用する必要があります。

場合によっては、クラスが特定のクラスの型であるかどうか、または特定のインターフェイスを実装しているかどうかを判断する必要があります。このタスクには、instanceof が適しています。 instanceof は、インスタンスが特定の型であるかどうか、インスタンスが特定の型を継承しているかどうか、インスタンスまたはその祖先クラスがクラス固有のインターフェイスを実装しているかどうかという 3 つのことをチェックします。

一部の言語には複数のクラスから継承する機能があり、これは多重継承と呼ばれます。 PHP は多重継承をサポートしていません。このアイデアは、クラスに対して複数のインターフェイスを宣言する機能を提供するというものです。

インターフェイスは、クラスが従わなければならないルールを宣言するのに非常に役立ちます。契約に基づくプログラミング テクノロジは、この機能を使用してカプセル化を強化し、ワークフローを最適化します。

www.bkjia.com本当http://www.bkjia.com/PHPjc/788637.html技術記事 1. PHP の抽象クラス PHP 5 は、抽象クラスと抽象メソッドをサポートします。抽象として定義されたクラスはインスタンス化できません。少なくとも 1 つのメソッドが抽象宣言されている場合は、任意のクラス...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

golangには抽象クラスがありますか? golangには抽象クラスがありますか? Jan 06, 2023 pm 07:04 PM

Golang には抽象クラスがありません。 Golang はオブジェクト指向 (OOP) 言語ではありません。クラス、継承、抽象クラスの概念はありません。ただし、golang には構造体 (struct) とインターフェース (インターフェース) があり、これらを組み合わせることによって間接的に実装できます。構造体とインターフェイス オブジェクト言語の抽象クラス。

Java のデザイン パターンにおけるインターフェイスと抽象クラスの適用 Java のデザイン パターンにおけるインターフェイスと抽象クラスの適用 May 01, 2024 pm 06:33 PM

インターフェイスと抽象クラスは、分離と拡張性のためにデザイン パターンで使用されます。インターフェイスはメソッド シグネチャを定義し、抽象クラスは部分的な実装を提供し、サブクラスは未実装のメソッドを実装する必要があります。ストラテジ パターンでは、インターフェイスを使用してアルゴリズムを定義し、抽象クラスまたは具象クラスが実装を提供するため、アルゴリズムを動的に切り替えることができます。オブザーバー パターンでは、インターフェイスを使用してオブザーバーの動作を定義し、抽象クラスまたは具象クラスを使用して通知をサブスクライブおよびパブリッシュします。アダプター パターンでは、インターフェイスを使用して既存のクラスを適応させることができ、互換性のあるインターフェイスを実装できるため、元のコードとの対話が可能になります。

PHP のインターフェイスと抽象クラスの違いは何ですか? PHP のインターフェイスと抽象クラスの違いは何ですか? Jun 04, 2024 am 09:17 AM

インターフェイスと抽象クラスは、拡張可能な PHP コードを作成するために使用されます。これらの間には次のような重要な違いがあります。インターフェイスは実装を通じて強制するのに対し、抽象クラスは継承を通じて強制します。インターフェイスには具象メソッドを含めることはできませんが、抽象クラスには含めることができます。クラスは複数のインターフェイスを実装できますが、継承できるのは 1 つの抽象クラスのみです。インターフェイスはインスタンス化できませんが、抽象クラスはインスタンス化できます。

インスタンスオブは何をするのですか? インスタンスオブは何をするのですか? Nov 14, 2023 pm 03:50 PM

instanceof の機能は、オブジェクトが特定のクラスのインスタンスであるかどうか、またはオブジェクトが特定のインターフェイスを実装しているかどうかを判断することです。 instanceof は、オブジェクトが指定されたタイプであるかどうかを確認するために使用される演算子です。 instanceof 演算子の使用シナリオ: 1. 型チェック: オブジェクトの特定の型を判断し、異なる型に応じて異なるロジックを実行するために使用できます; 2. インターフェイスの判断: オブジェクトがインターフェイスを実装しているかどうかを判断するために使用できます。 、オブジェクトがインターフェイスを実装しているかどうかを判断するため、インターフェイスの定義は対応するメソッドを呼び出します; 3. 下方変換など。

Golang の関数インターフェイスと抽象クラスの類似点と相違点についての詳細な説明 Golang の関数インターフェイスと抽象クラスの類似点と相違点についての詳細な説明 Apr 20, 2024 am 09:21 AM

関数型インターフェイスと抽象クラスはどちらもコードの再利用を可能にするために使用されますが、関数型インターフェイスは参照関数を使用し、抽象クラスは継承を使用するなど、さまざまな方法で実装されます。関数型インターフェイスはインスタンス化できませんが、抽象クラスはインスタンス化できます。関数型インターフェイスは宣言されたメソッドをすべて実装する必要がありますが、抽象クラスは一部のメソッドのみを実装できます。

Java でのインターフェイスと抽象クラスの内部クラス実装 Java でのインターフェイスと抽象クラスの内部クラス実装 Apr 30, 2024 pm 02:03 PM

Java では、インターフェイスおよび抽象クラス内で内部クラスを定義できるため、コードの再利用とモジュール化に柔軟性が提供されます。インターフェイスの内部クラスは特定の関数を実装できますが、抽象クラスの内部クラスは一般的な関数を定義でき、サブクラスは具体的な実装を提供します。

Java インターフェイスと抽象クラス: プログラミング天国への道 Java インターフェイスと抽象クラス: プログラミング天国への道 Mar 04, 2024 am 09:13 AM

インターフェイス: 実装のないコントラクト インターフェイスは、Java でメソッド シグネチャのセットを定義しますが、具体的な実装は提供しません。これは、インターフェイスを実装するクラスに、その指定されたメソッドを強制的に実装するコントラクトとして機能します。インターフェイス内のメソッドは抽象メソッドであり、メソッド本体はありません。コード例: publicinterfaceAnimal{voideat();voidsleep();} 抽象クラス: 部分的に実装されたブループリント 抽象クラスは、そのサブクラスによって継承できる部分的な実装を提供する親クラスです。インターフェイスとは異なり、抽象クラスには具体的な実装と抽象メソッドを含めることができます。抽象メソッドは、abstract キーワードを使用して宣言され、サブクラスによってオーバーライドされる必要があります。コード例: publicabstractcla

Java インターフェースと抽象クラス: それらの間の内部接続を明らかにする Java インターフェースと抽象クラス: それらの間の内部接続を明らかにする Mar 04, 2024 am 09:34 AM

インターフェイス インターフェイスは、Java の抽象メソッドと定数を定義します。インターフェイス内のメソッドは実装されていませんが、インターフェイスを実装するクラスによって提供されます。このインターフェイスは、実装クラスが指定されたメソッド実装を提供することを要求するコントラクトを定義します。インターフェイスを宣言します。 publicinterfaceExampleInterface{voiddoSomething();intgetSomething();} 抽象クラス 抽象クラスは、インスタンス化できないクラスです。これには、抽象メソッドと非抽象メソッドが混在しています。インターフェイスと同様に、抽象クラスの抽象メソッドはサブクラスによって実装されます。ただし、抽象クラスには、デフォルトの実装を提供する具象メソッドを含めることもできます。抽象クラスを宣言: publicabstractcl

See all articles