PHP Reliure dynamique


Exemple

La liaison dynamique, également appelée substitution de méthode, est un exemple de polymorphisme d' exécution qui se produit lorsque plusieurs classes contiennent des implémentations différentes de la même méthode, mais l'objet auquel la méthode sera appelée est inconnu jusqu'au moment de l'exécution .

Ceci est utile si une certaine condition dicte quelle classe sera utilisée pour effectuer une action, où l'action est nommée de la même manière dans les deux classes.

interface Animal {
    public function makeNoise();
}

class Cat implements Animal {
    public function makeNoise
    {
        $this->meow();
    }
    ...
}

class Dog implements Animal {
    public function makeNoise {
        $this->bark();
    }
    ...
}

class Person {
    const CAT = 'cat';
    const DOG = 'dog';

    private $petPreference;
    private $pet;

    public function isCatLover(): bool {
        return $this->petPreference == self::CAT;
    }

    public function isDogLover(): bool {
        return $this->petPreference == self::DOG;
    }

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

    public function getPet(): Animal {
        return $this->pet;
    }
}

if($person->isCatLover()) {
    $person->setPet(new Cat());
} else if($person->isDogLover()) {
    $person->setPet(new Dog());
}

$person->getPet()->makeNoise();

Dans l'exemple ci-dessus, la classe Animal ( Dog|Cat ) qui fera makeNoise est inconnue jusqu'à l'exécution en fonction de la propriété de la classe User .