ホームページ  >  記事  >  バックエンド開発  >  PHP ポリモーフィズムと動的バインディング

PHP ポリモーフィズムと動的バインディング

*文
*文オリジナル
2017-12-26 13:17:421724ブラウズ

この記事では主にPHPのポリモーフィズムと動的バインディングを紹介し、ポリモーフィズムと動的バインディングとは何か、ポリモーフィズムと動的バインディングの例について説明します。お役に立てれば幸いです。

ポリモーフィズムとは何ですか?

ポリモーフィズムは、データの抽象化と継承に続くオブジェクト指向言語の 3 番目の機能です。文字通り理解すると、ポリモーフィズムは「複数の形式」を意味します。簡単に言うと、オブジェクト指向では、「言語が型に応じて異なる方法でオブジェクトを処理する能力を持っている」ことを意味します。特に、メソッドをオーバーロードし、クラスを継承する機能です。ポリモーフィズムはオブジェクト指向言語の重要な機能であると考えられています。

例:

Shape インターフェイスを作成し、空のメソッドdraw() を定義します。その後、すべての実装クラスがこのメソッドを実装する必要があります。ただし、Shape には Triangle と Rectangle という 2 つの実装クラスがあるとします。ただし、この Java のようなものを渡すことはできません。 PHP のポリモーフィズムを説明するコード:

Shape s = new Triangle();
s.draw();


ただし、関数 (またはメソッド) のパラメーターの型を制限できるタイプ ヒンティングが PHP5.1 で導入されました。この機能を使用して、PHP5 のポリモーフィズムを示します。

次のコードを参照してください:

class TestPolymorphism {
    public function drawNow(Shape $shape) {
        $shape->draw();
    }
}


関数drawNow()は、渡されるパラメータの型を、Shapeインターフェースの派生クラスのオブジェクトに制限します。ここでdrawNow()に渡すパラメータは、TriangleまたはTriangleになります。 Rectangle オブジェクト、または Circle などの他の Shape インターフェイスの派生クラス オブジェクトである可能性があります。簡単に言えば、drawNow() のパラメータの型は、$shape->draw() の動作によって最終的に決定されます。たとえば、Triangle オブジェクトが渡された場合は Triangle のdraw() メソッドが呼び出され、Rectangle オブジェクトが渡された場合は Rectangle のdraw() メソッドが呼び出されます。と呼ばれた。実行時に渡されるオブジェクト パラメーターの型に基づいて呼び出すオブジェクト メソッドを決定するこの動作は、ポリモーフィズムと呼ばれます。

Shape は抽象基本クラスまたは非抽象基本クラスにすることもできます。上記の説明は当てはまります。違いは、インターフェイスは実装クラスが準拠する必要がある一連のルールのみを定義するのに対し、基本クラスを使用すると派生クラスにいくつかのデフォルト動作を提供できることです。

参考コードは以下の通りです:

/**
 * Shape Interface
 * 
 * @version 1.0
 * @copyright 
 */
interface Shape {
    public function draw();
}
 
/**
 * Triangle 
 * 
 * @uses Shape
 * @version 1.0
 * @copyright
 */
class Triangle implements Shape {   
    public function draw() {
        print "Triangle::draw()\n";
    }
}
 
/**
 * Rectangle 
 * 
 * @uses Shape
 * @version 1.0
 * @copyright
 */
class Rectangle implements Shape {
    public function draw() {
        print "Rectangle::draw()\n";
    }
}
 
/**
 * Test Polymorphism
 * 
 * @version 1.0
 * @copyright
 */
class TestPoly {
    public function drawNow(Shape $shape) {
        $shape->draw();
    }
}
 
 
$test = new TestPoly();
$test->drawNow(new Triangle());
$test->drawNow(new Rectangle());
 
/* vim: set expandtab tabstop=4 shiftwidth=4: */

動的バインディングとは何ですか?

HaoHappy によって翻訳された PHP5 オブジェクト パターンは、セクション 9 で紹介されています。

アクセスを制限することに加えて、アクセス メソッドは、サブクラスによって呼び出されるメソッド、またはサブクラスによってアクセスされるプロパティも決定します。 関数呼び出しと関数自体の間の関係、およびメンバー アクセスと変数メモリ アドレスの間の関係は、バインディングと呼ばれます。

別の言い方:

バインディング: メソッド呼び出しをメソッド自体に接続することはバインディングと呼ばれ、コンパイル時にバインディングが発生する場合は静的バインディングと呼ばれ、プログラムの実行時にはバインディング方法が決定されます。オブジェクトのタイプであり、動的バインディングと呼ばれます。

PHP は動的言語であり、動的バインディングを使用します。すべてが自動的に行われるため、どのバインディング戦略を採用するかを検討する必要はありません。


関連する推奨事項:

PHP オブジェクト指向の Final クラスと Final メソッド

PHP シングルトン パターンの実装

PHP ファクトリ パターンの使用法P チュートリアル

以上がPHP ポリモーフィズムと動的バインディングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。