PHP5 ポリモーフィズムと動的バインディングの概要、php5 ポリモーフィック動的バインディング_PHP チュートリアル
PHP5 ポリモーフィズムと動的バインディングの紹介、php5 ポリモーフィック動的バインディング
ポリモーフィズムとは何ですか?
ポリモーフィズムは、データの抽象化と継承に続くオブジェクト指向言語の 3 番目の機能です。文字通り理解すると、ポリモーフィズムは「複数の形式」を意味します。簡単に言うと、オブジェクト指向では、「言語が型に応じて異なる方法でオブジェクトを処理する能力を持っている」ことを意味します。特に、メソッドをオーバーロードし、クラスを継承する機能です。ポリモーフィズムはオブジェクト指向言語の重要な機能と考えられています。
例:
インターフェイス Shape を作成し、空のメソッドdraw() を定義します。次に、Shape には Triangle と Rectangle という 2 つの実装クラスがあると仮定します。
コードをコピーします コードは次のとおりです:
Shape s = new Triangle();
s.draw();
ただし、型ヒンティングは PHP5.1 で導入され、関数 (またはメソッド) のパラメーターの型を制限できます。この機能を使用して、PHP5 の多態性を示します。
次のコードを参照してください:
コードをコピーします コードは次のとおりです:
クラス TestPolymorphism {
パブリック関数drawNow(Shape $shape) {
$shape->draw();
}
}
関数drawNow()で渡されるパラメータの型は、Shapeインターフェイスの派生クラスのオブジェクトに制限されています。ここでdrawNow()に渡すパラメータは、TriangleオブジェクトまたはRectangleオブジェクト、または他の派生クラスオブジェクトである可能性があります。簡単に言うと、drawNow() のパラメータの型は、最終的には渡されるパラメータの特定の型によって決まります。 Triangle オブジェクトが渡された場合は、Triangle のdraw() メソッドを呼び出します。 Rectangle オブジェクトが渡された場合は、Rectangle のdraw() メソッドを呼び出します。実行時に渡されるオブジェクト パラメーターの型に基づいて呼び出すオブジェクト メソッドを決定するこの動作は、ポリモーフィズムと呼ばれます。
Shape は、抽象基本クラスまたは非抽象基本クラスにすることもできます。上記の説明は当てはまります。違いは、インターフェイスは実装クラスが準拠する必要がある一連のルールのみを定義するのに対し、基本クラスを使用すると派生クラスにいくつかのデフォルト動作を提供できることです。
参照コードは次のとおりです:
コードをコピーします コードは次のとおりです:
/**
* 形状インターフェイス
*
* @バージョン1.0
* @著作権
*/
インターフェース形状{
パブリック関数draw();
}
/**
*トライアングル
*
* @はシェイプを使用します
* @バージョン1.0
* @copyright
*/
クラス Triangle は Shape {
を実装します
パブリック関数draw() {
print "Triangle::draw()n";
}
}
/**
* 長方形
*
* @はシェイプを使用します
* @バージョン1.0
* @copyright
*/
クラス Rectangle は Shape {
を実装します
パブリック関数draw() {
print "Rectangle::draw()n";
}
}
/**
* ポリモーフィズムのテスト
*
* @バージョン1.0
* @copyright
*/
クラス TestPoly {
パブリック関数drawNow(Shape $shape) {
$shape->draw();
}
}
$test = 新しい TestPoly();
$test->drawNow(new Triangle());
$test->drawNow(new Rectangle());
/* vim: 拡張タブタブストップ=4 シフト幅=4 を設定: */
動的バインディングとは何ですか?
HaoHappy によって翻訳された PHP5 オブジェクト パターンはセクション 9 で紹介されています:
アクセスを制限することに加えて、アクセス メソッドは、サブクラスによって呼び出されるメソッド、またはサブクラスによってアクセスされるプロパティも決定します。 関数呼び出しと関数自体の間の関係、およびメンバー アクセスと変数メモリ アドレスの間の関係は、バインディングと呼ばれます。
別の言い方:
バインディング: メソッド呼び出しをメソッド自体に接続することをバインディングと呼びます。バインディングがコンパイル時に発生する場合、バインディングはオブジェクトの型に基づいて決定されます。動的バインディングと呼ばれます。
PHP は動的言語であり、動的バインディングを使用します。すべてが自動的に行われるため、どのバインディング戦略を採用するかを検討する必要はありません。

ホット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)

ホットトピック











php5 と php8 の違いは、パフォーマンス、言語構造、型システム、エラー処理、非同期プログラミング、標準ライブラリ関数、セキュリティの点です。詳細な紹介: 1. パフォーマンスの向上. PHP5 と比較して、PHP8 はパフォーマンスが大幅に向上しています. PHP8 では、高頻度の実行コードをコンパイルおよび最適化できる JIT コンパイラーが導入されており、それによって実行速度が向上しています; 2. 言語構造の改善、 PHP8 では、いくつかの新しい言語構造と関数が導入されており、PHP8 では名前付きパラメータがサポートされており、開発者はパラメータの順序などの代わりにパラメータ名を渡すことができます。

Vue でフォーム データを動的にバインドして更新する方法 フロントエンド開発の継続的な開発に伴い、フォームは頻繁に使用されるインタラクティブな要素です。 Vue では、フォームの動的なバインドと更新が一般的な要件です。この記事では、Vue でフォーム データを動的にバインドおよび更新する方法を紹介し、具体的なコード例を示します。 1. フォーム データの動的バインディング Vue は、フォーム データの双方向バインディングを実現する v-model 命令を提供します。 v-model ディレクティブを通じて、form 要素の値を Vue インスタンスと比較できます。

php5 でポート 80 を変更する方法: 1. Apache サーバー設定ファイルのポート番号を編集します; 2. PHP 設定ファイルを編集して、PHP が新しいポートで動作することを確認します; 3. Apache サーバーを再起動すると、PHP アプリケーションが起動します。新しいポートで実行を開始します。ポートで実行します。

継承とポリモーフィズムはクラスの結合に影響します。派生クラスは基本クラスに依存するため、継承により結合が増加します。ポリモーフィズムにより、オブジェクトは仮想関数と基本クラス ポインターを通じて一貫した方法でメッセージに応答できるため、結合が軽減されます。ベスト プラクティスには、継承を控えめに使用すること、パブリック インターフェイスを定義すること、基本クラスへのデータ メンバーの追加を回避すること、依存関係の注入を通じてクラスを分離することが含まれます。ポリモーフィズムと依存性注入を使用して銀行口座アプリケーションの結合を軽減する方法を示す実践的な例。

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

デストラクターは C++ ポリモーフィズムにおいて重要であり、派生クラス オブジェクトが破棄されるときにメモリを適切にクリーンアップすることを保証します。ポリモーフィズムにより、異なる型のオブジェクトが同じメソッド呼び出しに応答できるようになります。デストラクターは、オブジェクトが破棄されてメモリを解放するときに自動的に呼び出されます。派生クラスのデストラクターは、基本クラスのデストラクターを呼び出して、基本クラスのメモリが確実に解放されるようにします。

C++ ポリモーフィズムの長所と短所: 利点: コードの再利用性: 共通のコードでさまざまなオブジェクト タイプを処理できます。拡張性: 既存のコードを変更せずに、新しいクラスを簡単に追加できます。柔軟性と保守性: 動作と型を分離することで、コードの柔軟性が向上します。欠点: 実行時のオーバーヘッド: 仮想関数のディスパッチによりオーバーヘッドが増加します。コードの複雑さ: 複数の継承階層により複雑さが増します。バイナリ サイズ: 仮想関数を使用すると、バイナリ ファイルのサイズが増加します。実際のケース: 動物クラスの階層では、ポリモーフィズムにより、さまざまな動物オブジェクトがアニマル ポインターを通じて音を出すことができます。

ポリモーフィズムでは、関数の戻り値の型は、派生クラスが基本クラスのメソッドをオーバーライドするときに返される特定のオブジェクトの型を指定します。派生クラス メソッドの戻り値の型は、基本クラスと同じにすることも、より具体的な型にすることもできるため、より多くの派生型を返すことができるため、柔軟性が向上します。
