3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHP基礎(13)ポリモーフィズム

Last updated at Posted at 2018-10-13

オブジェクト指向の特徴である、継承、カプセル化をやりましたので、最後にポリモーフィズムを取り上げます。

#ポリモーフィズム

ポリモーフィズムとは簡単に言うと、異なるインスタンス(オブジェクト)を、同じ名前のメソッドでそれぞれを操作することです。テクニックとしてインターフェースを使った例を書きます。

<?php
/* 商品インターフェース */
interface Product {
    function getSalePrice();
}

/* 食べ物クラス */
class Food implements Product {
    private $price = 100;
    public function getSalePrice() {
        // 3割引
        return $this->price * 0.7;
    }
}

/* 飲み物クラス */
class Drink implements Product {
    private $price = 180;
    public function getSalePrice() {
        // 2割引
        return $this->price * 0.8;
    }
}

$food = new Food();
$drink = new Drink();
//それぞれのインスタンスを配列要素に入れる
$products = array($food, $drink);
//それぞれの価格を表示する
foreach($products as $product) {
    echo "セール価格は".$product->getSalePrice()."円です。\n";
}
?>

クラスFoodとクラスDrinkはインターフェースProductを実装したクラスになります。インターフェースではセール価格を返すgetSalePriceメソッドを定義せよ、と言っていますので、クラスFoodとクラスDrinkにはgetSalePriceメソッドを持たせます。
クラスFoodとクラスDrinkのインスタンス(オブジェクト)を配列に入れて、その配列を列挙しながらgetSalePriceメソッドを呼ぶとそれぞれのオブジェクトのセール価格が取得できます。

このテクニックの利点は、異なったオブジェクトを同じレベルで参照・操作できることです。ポリモーフィズムと言うと仰々しいですが、プログラムのある機能やデータを一つの塊として捉え、その塊の似て非なる集合を、ある同じ切り口で扱えるので便利です。

[<<PHP基礎(12)カプセル化]
(https://qiita.com/taka027/items/c821b089b1e88fe8a241)

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?