ホームページ >バックエンド開発 >PHPチュートリアル >PHP でポリモーフィズムを実装するにはどうすればよいですか?

PHP でポリモーフィズムを実装するにはどうすればよいですか?

WBOY
WBOYオリジナル
2024-06-04 15:17:00614ブラウズ

PHP のポリモーフィズムにより、異なるオブジェクトが独自の動作を持ちながら同じインターフェイスを共有できるようになります。インターフェイスと抽象クラスによる実装: インターフェイスは、実装を提供せずにメソッド シグネチャを定義します。オブジェクトはインターフェイス内のすべてのメソッドを実装する必要があります。抽象クラスには、サブクラスでのみ実装できる未実装のメソッドが含まれています。実用的な例: 動物の行動インターフェイス AnimalActions を定義します。抽象メソッド makeSound を持つ抽象動物クラス Animal を定義します。具体的な動物クラス Dog と Cat を作成し、AnimalActions と makeSound を実装します。動物を管理する Zoo クラスを作成します。 Zoo に動物を追加し、「仲間の鳴き声」と「ふわふわの鳴き声」を出力するトーク メソッドを実行します。

PHP でポリモーフィズムを実装するにはどうすればよいですか?

PHP のポリモーフィズム

ポリモーフィズムは、オブジェクト指向プログラミングにおける重要な機能であり、異なるオブジェクトが独自の動作を維持しながら同じインターフェイスを持つことができます。 PHP では、インターフェイスと抽象クラスを使用してポリモーフィズムを実現できます。

インターフェイス

インターフェイスは、実際の実装を提供せずにメソッド シグネチャのリストを定義します。オブジェクトは、インターフェイスで定義されたすべてのメソッドを実装する必要があります。これにより、異なる特定の動作を持つオブジェクトを同じインターフェイスのタイプと見なすことができます。

interface Vehicle {
    public function start();
    public function stop();
    public function drive();
}

抽象クラス

抽象クラスは、少なくとも 1 つの未実装のメソッドを含むクラスです。抽象メソッドは抽象クラスのサブクラスにのみ実装でき、さまざまなサブクラスに特定の動作を提供します。

abstract class Animal {
    abstract public function makeSound();
}

実際の例: 動物園

動物がさまざまな行動をとる動物園の例を考えてみましょう。インターフェイスと抽象クラスを使用して、動物の公開動作と具体的な実装を定義できます。

インターフェース

interface AnimalActions {
    public function talk();
    public function walk();
    public function eat();
}

抽象クラス

abstract class Animal {
    protected $name;

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

    abstract public function makeSound();
}

具体クラス

class Dog extends Animal implements AnimalActions {
    public function __construct($name) {
        parent::__construct($name);
    }

    public function talk() {
        echo "{$this->name} barks.\n";
    }

    public function walk() {
        echo "{$this->name} walks.\n";
    }

    public function eat() {
        echo "{$this->name} eats dog food.\n";
    }

    public function makeSound() {
        echo "Woof!\n";
    }
}

class Cat extends Animal implements AnimalActions {
    public function __construct($name) {
        parent::__construct($name);
    }

    public function talk() {
        echo "{$this->name} meows.\n";
    }

    public function walk() {
        echo "{$this->name} slinks.\n";
    }

    public function eat() {
        echo "{$this->name} eats cat food.\n";
    }

    public function makeSound() {
        echo "Meow!\n";
    }
}

を使用して、動物を管理する動物園クラスを作成できます:

class Zoo {
    private $animals = [];

    public function addAnimal(AnimalActions $animal) {
        $this->animals[] = $animal;
    }

    public function letAnimalsTalk() {
        foreach ($this->animals as $animal) {
            $animal->talk();
        }
    }
}

動物園を作ることができる、動物を追加して話させます:

$zoo = new Zoo();
$zoo->addAnimal(new Dog('Buddy'));
$zoo->addAnimal(new Cat('Fluffy'));
$zoo->letAnimalsTalk();

これは出力します:

Buddy barks.
Fluffy meows.

以上がPHP でポリモーフィズムを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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