ホームページ  >  記事  >  バックエンド開発  >  PHP におけるポリモーフィズムと動的バインディングの詳細な紹介

PHP におけるポリモーフィズムと動的バインディングの詳細な紹介

怪我咯
怪我咯オリジナル
2017-07-16 09:58:351510ブラウズ

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

ポリモーフィズムは、データの抽象化と継承に続く、オブジェクト指向言語の 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またはRectangle オブジェクト、または Circle などの Shape インターフェイスの他の派生クラス オブジェクトの場合、drawNow() のパラメーターの型は最終的には予測不可能です。たとえば、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: */

動的バインディングとは何ですか? PHP5 に翻訳された

HaoHappy の Object パターンは、セクション 9 で紹介されています。

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

別の言い方:

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

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

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

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