Vous le savez sûrement, les interfaces servent à contraindre des classes à implémenter une ou des méthodes publiques. N’importe quelle classe, abstraite ou concrète, peut les implémenter. Mais saviez-vous que, contrairement aux classes, les interfaces peuvent hériter de plusieurs parents ?
Prenons l’exemple suivant ;
interface Counterializable extends Serializable, Countable { public function counterialiser(); } class CompteEtSerialise implements Counterializable {}
Ici, l’interface Counterializable (contraction de Countable et de Serializable) impose à notre classe concrète CompteEtSerialise l’implémentation de 4 méthodes:
– deux provenant de Serializable (serialize et unserialize)
– une provenant de Countable (count)
– une provenant de Counterializable (counterialiser)
Si l’on exécute ce code, il se produit l’erreur suivante :
PHP Fatal error: Class CompteEtSerialise contains 4 abstract methods and must therefore be declared abstract or implement the remaining methods (Counterializable::counterialiser, Serializable::serialize, Serializable::unserialize, ...)
Ce message d’erreur est bien la preuve que l’héritage multiple, qui ne s’applique pas aux classes, s’applique en revanche aux interfaces !