ポリモーフィズムとは何ですか?
ポリモーフィズムは、データの抽象化と継承に続くオブジェクト指向言語の 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 は動的言語であり、動的バインディングを使用します。すべてが自動的に行われるため、どのバインディング戦略を採用するかを検討する必要はありません。