【 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>
メモ
これがポリモーフィズムです!
ディスカッション
コメント一覧
まだ、コメントがありません