7
votes

PHP: quand utiliser une classe d'abstrait et d'interface?

Je me demandais comment vous décidez comment vous décidez quand utiliser une classe de résumé ou d'interface pendant le développement de l'application, car ils fournissent tous deux des fonctionnalités similaires avec une légère différence. J'apprécie toute aide. Merci.


6 Réponses :


3
votes

Lorsque je développe et essaye de décider d'utiliser une interface ou une classe abstraite, je pense généralement à savoir si les classes qui n'interrèrent ne contiendront que la même structure (méthodes, propriétés, etc.) mais différentes implémentations.

Si la mise en œuvre des méthodes sera différente, mais je veux assurer la similitude d'un point de vue structurel, j'utilise une interface. Si la structure et la mise en œuvre sont les mêmes, j'ai tendance à utiliser des classes abstraites.


2 commentaires

Il ne précise pas clairement pourquoi si la structure et la mise en œuvre sont les mêmes, j'ai tendance à utiliser des classes abstraites vous utilisez une classe abstraite si la même structure et la même implémentation requise?


@Rnkushwaha, je veux dire que si je veux partager une implémentation identique d'une méthode / propriété entre plusieurs classes héritantes, je créerais une classe abstraite afin que la mise en œuvre puisse vivre dans la classe abstraite. Interfaces n'autorisent aucune implémentation. Est-ce que ça fait plus de sens?



4
votes

J'utilise des classes abstraites lorsque je souhaite que les classes héritantes hériter de certaines fonctionnalités et des interfaces lorsque je souhaite définir des critères structurels minimaux pour un groupe de classes.

Une chose à retenir est que toute classe donnée peut "hériter" (techniquement mettre en œuvre) de nombreuses interfaces mais une sous-classe (être aussi abstraite ou non).


0 commentaires

1
votes

Langues comme PHP Prenez en charge la mise en œuvre de plusieurs interfaces multiples, mais pas dans une héritage de classe multiple, et cela fait souvent partie de la décision - votre classe prendra-t-elle prendre en charge plusieurs comportements (interfaces) ou jouera-il comme un type de chose (classe de base)? < / p>

Il y a aussi la question de savoir comment la fonctionnalité de base est mise en œuvre. Si vous utilisez une approche comme le Modèle de modement de modèle où vous avez un code de mise en œuvre commun pour tous les calculs dérivés Classes, vous voudrez utiliser une classe de base abstraite.


0 commentaires

6
votes

Utilisez l'abstraction si vous avez des méthodes par défaut (avec code d'accompagnement) pour héritiers. Utilisez des interfaces si vous devez simplement vous assurer que les classes héritantes de ce parent doivent mettre en œuvre toutes les méthodes définies. Mot de prudence: Utilisez des classes abstraites et des interfaces uniquement si vous avez l'intention d'appliquer la structure et l'organisation (généralement avec une équipe). Il y a une surcharge de performance.


0 commentaires

0
votes

Voici un bon article expliquant le concept d'interface et pourquoi de l'utiliser et comment déclarer des classes abstraites dans PHP.AI N'a pas différencié quand utiliser les deux concepts.
Comprendre et appliquer (interfaces) Polymorphisme dans PHP


0 commentaires

0
votes

Lorsque vous êtes obligé de certaines fonctionnalités est requis - utilisez l'interface.Mais si vous souhaitez une fonction de fonctionnalité optionnelle - Utilisez une classe abstraite. Par exemple, si ISI (Indian Standard Institute) établit une éternité pour le moniteur informatique avec fonctionnalité (il devrait disposer) - Affichage, bouton d'alimentation, setter contrasté. Si toutes les fonctionnalités sont obligatoires obligatoires, utilisez l'interface, quelle que soit la société du fabricant de surveillance liée à la mise en œuvre de toutes les fonctionnalités. Si cela est facultatif, utilisez une classe abstraite.


0 commentaires