【 PHP 】PHP8に入門してみた 204日目 PHPの基本 ( オブジェクト指向 ポリモーフィズム)

PHP8技術者認定初級試験 が始まるようなので 試験に向けて (できるだけ)勉強しようと思います! 使用する書籍は独習PHP 第4版(山田 祥寛)|翔泳社の本 (shoeisha.co.jp) となります。

オブジェクト指向

ポリモーフィズム

ポリモーフィズムとは、「同じインターフェースを実装する」異なるクラスが異なる方法で振る舞うことができる、オブジェクト指向の基本的な概念の1つです。

PHPでは、ポリモーフィズムを実現するためにインターフェースや抽象クラスを使用することができます。

Javaも同じですね。

Animalインターフェースを実装するDogクラスとCatクラスがあります。
AnimalOwnerクラスは、Animalインターフェースを実装するオブジェクトを引数にとるコンストラクタと、
渡されたオブジェクトのspeak()メソッドを呼び出すplay()メソッドを持っています。
最後に、DogとCatのインスタンスを生成し、AnimalOwnerクラスに渡して、それぞれのspeak()メソッドを呼び出しています。

この例では、DogとCatのインスタンスがAnimalOwnerクラスに渡されていますが、
AnimalOwnerクラスは引数にAnimalインターフェースを実装するオブジェクトを要求しているため、
DogとCatが異なるクラスであっても、共通のインターフェースを持っていることから正しく動作します。

 

<!DOCTYPE html>

<html>

<?php

// 動物を表すインターフェース
interface Animal
{
    public function speak();
}

// 犬を表すクラス
class Dog implements Animal
{
    public function speak()
    {
        print("わんわん\n");
    }
}

// 猫を表すクラス
class Cat implements Animal
{
    public function speak()
    {
        print("にゃーにゃー\n");
    }
}

// 動物を飼う人を表すクラス
class AnimalOwner
{
    // has-a関係というやつですね。(委譲ともいいますかね。)
    private $pet;

    public function __construct(Animal $pet)
    {
        $this->pet = $pet;
    }

    public function play()
    {
        $this->pet->speak();
    }
}

// 犬と猫のインスタンスを生成
$dog = new Dog();
$cat = new Cat();

// AnimalOwnerクラスのインスタンスを生成し、犬と猫を渡す
$dogOwner = new AnimalOwner($dog);
$catOwner = new AnimalOwner($cat);



?>


<head>
    <meta charset="UTF-8" />
    <title>こんにちは!</title>
    <!-- Bootstrapを有効化 -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" />
</head>

<body>
    <?php
    // 動物と遊ぶ
    $dogOwner->play(); // わんわん
    $catOwner->play(); // にゃーにゃー
    ?>
</body>

</html>

 

 

メモ

これがポリモーフィズムです!

PHPPHP

Posted by raika@blog