Maison  >  Article  >  développement back-end  >  Comment implémenter le polymorphisme en PHP ?

Comment implémenter le polymorphisme en PHP ?

WBOY
WBOYoriginal
2024-06-04 15:17:00572parcourir

Le polymorphisme en PHP permet à différents objets de partager la même interface tout en ayant des comportements uniques. Implémentation via des interfaces et des classes abstraites : les interfaces définissent les signatures de méthodes sans fournir d'implémentations. L'objet doit implémenter toutes les méthodes de l'interface. Les classes abstraites contiennent des méthodes non implémentées qui ne peuvent être implémentées que dans des sous-classes. Exemple pratique : Définir l'interface de comportement animal AnimalActions. Définissez la classe animale abstraite Animal, qui possède la méthode abstraite makeSound. Créez des classes d'animaux concrètes Chien et Chat, implémentez AnimalActions et makeSound. Créez une classe Zoo pour gérer les animaux. Ajoutez des animaux au zoo et exécutez leur méthode de conversation, en affichant « Buddy aboie » et « Fluffy miaou ».

Comment implémenter le polymorphisme en PHP ?

Polymorphisme en PHP

Le polymorphisme est une fonctionnalité importante dans la programmation orientée objet, qui permet à différents objets d'avoir la même interface tout en conservant leur propre comportement unique. En PHP, le polymorphisme peut être réalisé à l'aide d'interfaces et de classes abstraites.

Interface

Une interface définit une liste de signatures de méthodes sans fournir d'implémentation réelle. Les objets doivent implémenter toutes les méthodes définies dans l'interface, ce qui permet aux objets ayant des comportements spécifiques différents d'être considérés comme des types de la même interface.

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

Classe abstraite

Une classe abstraite est une classe qui contient au moins une méthode non implémentée. Les méthodes abstraites ne peuvent être implémentées que dans des sous-classes de classes abstraites, fournissant des comportements spécifiques pour différentes sous-classes.

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

Exemple pratique : Zoo

Prenons l'exemple d'un zoo où les animaux ont des comportements différents. Nous pouvons utiliser des interfaces et des classes abstraites pour définir le comportement public et l'implémentation spécifique des animaux.

Interface

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

Classe abstraite

abstract class Animal {
    protected $name;

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

    abstract public function makeSound();
}

Classe concrète

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";
    }
}

En utilisant

, nous pouvons créer une classe de zoo pour gérer les animaux :

class Zoo {
    private $animals = [];

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

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

le script principal nous pouvons créer un zoo, ajoutez des animaux et faites-les parler :

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

Cela affichera :

Buddy barks.
Fluffy meows.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn