Maison >développement back-end >tutoriel php >Introduction aux concepts de base PHP orientés objet (interface) et aux exemples de classes abstraites

Introduction aux concepts de base PHP orientés objet (interface) et aux exemples de classes abstraites

伊谢尔伦
伊谢尔伦original
2017-07-08 09:16:021133parcourir

Qu'est-ce qu'une interface ?

L'interface est une abstraction de méthodes. Si différentes classes ont les mêmes méthodes, vous devriez alors envisager d'utiliser des interfaces.
(1) Une interface est une spécification comportementale et un protocole. En fait, c'est un accord et une contrainte entre classes
(2) C# ne supporte pas l'héritage multiple, mais il laisse cette fonction à l'interface pour l'implémentation.
(3) Les méthodes d'appel des ressources système entre les classes sont différentes, ce qui rend la communication entre elles difficile. Cependant, les interfaces peuvent masquer les différences entre elles et leur permettre de communiquer en douceur.

(4) Vous pouvez spécifier quelles méthodes une certaine classe doit implémenter, mais vous n'avez pas besoin de définir le contenu spécifique de ces méthodes.

Qu'est-ce qu'une classe abstraite (abstractclass) ?

1. Une classe abstraite ne fournit qu'une implémentation partielle d'un type. Les classes abstraites peuvent avoir des variables d'instance et un ou plusieurs constructeurs. Une classe abstraite peut avoir à la fois des méthodes abstraites et des méthodes concrètes. Une classe abstraite n'aura pas d'instances et ces constructeurs ne peuvent pas être appelés par les clients pour créer des instances. Le constructeur d'une classe abstraite peut être appelé par ses sous-classes, de sorte que toutes les sous-classes d'une classe abstraite puissent avoir des implémentations communes, et que différentes sous-classes puissent avoir leurs propres implémentations basées sur celles-ci.

2. Objectif des classes abstraites 1) Les classes concrètes ne sont pas utilisées pour l'héritage. Scott Meyers a souligné un jour que, dans la mesure du possible, évitez l'héritage de classes concrètes. 2) Supposons qu'il existe deux classes concrètes, la classe A et la classe B. La classe B est une sous-classe de la classe A. L'une des solutions de modification les plus simples consiste alors à créer une classe abstraite (ou interface Java) C, puis à laisser la classe A et la classe B devient une sous-classe de la classe abstraite C. 3) Les classes abstraites doivent avoir autant de code commun que possible. Pour améliorer le taux de réutilisation du code. 4) Les classes abstraites doivent avoir le moins de données possible.

3. Modèles et principes basés sur des classes abstraites 1) Programme pour les abstractions, pas pour une programmation spécifique. 2) Essayez d'utiliser la composition (Composition) au lieu de l'héritage pour réaliser la réutilisation. 3) Utilisez le mode méthode modèle

4. Quand faut-il utiliser l'héritage et la réutilisation ? 1) Une sous-classe est une catégorie spéciale de la superclasse, et non un rôle de la superclasse. C'est-à-dire que deux relations doivent être distinguées : « est-un » et « a-un ». 2) Il n’y aura jamais de situation où vous devrez remplacer une sous-classe par une autre sous-classe. Si le concepteur n’est pas sûr qu’une classe ne deviendra pas une sous-classe d’une autre classe à l’avenir, la classe ne doit pas être conçue pour être une sous-classe de la superclasse. 3) Les sous-classes ont la responsabilité d'étendre la superclasse, mais pas de remplacer (Override) ou d'annuler (Nullify) la superclasse. 4) L'héritage ne peut être utilisé que lorsque cela a du sens du point de vue de la taxonomie, et non de l'héritage de classe d'outils.

Les méthodes abstraites sont des méthodes qui doivent être mises en œuvre. Et uniquement dans les cours abstraits.

Interfaces et classes abstraites

Une classe peut hériter de plusieurs interfaces. . .
Une classe ne peut hériter que d'une seule classe abstraite. . .

Les méthodes abstraites sont des méthodes qui doivent être mises en œuvre. Tout comme les animaux doivent respirer. Mais les poissons respirent avec leurs branchies et les porcs avec leurs poumons.
Les animaux doivent avoir des méthodes de respiration. Comment respirer est une question de sous-classes.

Il existe désormais de nombreuses discussions et suggestions préconisant l'utilisation d'une interface au lieu d'une classe abstraite. Les deux peuvent généralement être mélangés en théorie, mais dans les applications pratiques, ils présentent encore certaines différences. Les classes abstraites servent généralement de classes parentes publiques pour fournir la base de l'extension des sous-classes. Les extensions incluent ici des attributs et des comportements. De manière générale, les interfaces ne prennent pas en compte les attributs, mais uniquement les méthodes, afin que les sous-classes puissent librement remplir ou étendre les méthodes définies par l'interface. Comme l'a dit le prince JAVA, l'adaptateur dans event est un bon adaptateur. application.
En utilisant un exemple simple, comme un enseignant, nous le traitons comme une classe abstraite avec ses propres attributs, tels que l'âge, le niveau d'éducation, le numéro d'enseignant, etc., et les enseignants sont également divisés en plusieurs types, nous pouvons hériter la classe d'enseignant et étend les attributs de catégorie uniques, tandis que les attributs universels ont été directement hérités.
En ce qui concerne l'interface ~ prenons l'exemple des enseignants. Les enseignants ont de nombreux comportements en plus des mêmes comportements que les gens ordinaires, il existe également des comportements liés à la carrière, comme corriger des copies de tests, donner des cours, etc. définissez ces comportements comme sans corps. Les méthodes, en tant que collection, sont une interface. Les enseignants Zhang San et Li Si ont des caractéristiques comportementales différentes, ils peuvent donc développer leur corps comportemental. En ce sens, l’interface se concentre sur le comportement.
En bref, dans de nombreux cas, les interfaces peuvent effectivement remplacer les classes abstraites, si vous n'avez pas besoin d'exprimer l'héritage sur les propriétés.

Une interface définit la spécification générale pour implémenter un certain service, déclarant les fonctions et constantes requises, mais ne précise pas comment l'implémenter. La raison pour laquelle les détails d'implémentation ne sont pas fournis est que différentes entités peuvent avoir besoin d'implémenter les définitions de méthodes publiques de différentes manières. La clé est d'établir un ensemble de principes généraux qui doivent être mis en œuvre uniquement lorsque ces principes sont respectés, que l'on peut dire que l'interface est mise en œuvre.

Les membres de la classe ne sont pas définis dans l'interface ! La définition des membres de la classe est entièrement laissée à la classe d’implémentation.

Hériter plus d'interfaces

<span style="color:#000000"><span style="color:#0000bb"></span></span>

<?php  
interface  a{  
    public function  foo ();  
}  
interface  b{  
    public function  bar ();  
}  
//一个接口类可以继承多个接口  
interface  c  extends  a ,  b{  
    public function  baz ();  
}  
  
class  d  implements  c  
{  
    public function  foo (){  
    }  
    public function  bar (){  
    }  
    public function  baz (){  
    }  
}  
?>

En PHP, non seulement une classe peut implémenter plusieurs interfaces, mais vous pouvez également implémenter plusieurs interfaces tout en héritant d'une classe . Interface, vous devez d'abord hériter de la classe puis implémenter l'interface

.

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