Le code suivant viole-t-il un principe/modèle de POO?La vérification de l'implémentation de l'interface dans une classe abstraite est-elle un anti-pattern?
En particulier, je suis intéressé par le instanceof chèque à l'intérieur du véhicule :: whatCanDo() méthode, qui contrôle si une sous-classe implents une interface spécifique. À première vue, cela semble aller à l'encontre du principe de Liskov, mais ce n'est pas le cas, car les classes avion et voiture sont toujours interchangeables.
abstract class Vehicle {
public function whatCanDo() {
if ($this instanceof CanFly) {
echo "can fly";
}
}
}
interface CanFly {
}
class Airplane extends Vehicle implements CanFly {
}
class Car extends Vehicle {
}
Nous pourrions supposer que l'écho est juste par exemple, je suppose –
@RobbieAverill difficile à dire. J'ai vu beaucoup trop de gens ayant des échos dans leur code 'class'. Fondamentalement, chaque troisième wrapper PDO (ce qui aurait effectivement besoin d'une diatribe séparée) sur StackOverflow le fait. –
@ tereško l'écho c'est juste par exemple, aussi les noms de classes sont des samples, mon vrai code est différent. – g4b0