PHP est un langage de programmation populaire. Dans la programmation orientée objet, l'interface est un concept courant. Une interface en PHP signifie qu'une classe définit un ensemble de méthodes, mais ne fournit pas d'implémentation. Au lieu de cela, ces méthodes sont implémentées par la classe qui implémente l'interface. Les interfaces jouent le rôle de classes d'implémentation standardisées et contraignantes, et ont une grande flexibilité et évolutivité. Dans l’interface PHP, elle est divisée en deux types : l’interface de classe abstraite et l’interface régulière. Dans cet article, nous nous concentrerons sur les différences entre les méthodes d'interface des classes PHP.
1.Interface de classe abstraite
Les classes abstraites ne peuvent pas être instanciées et ne peuvent être héritées que. Sa fonction principale est de fournir une structure de base pour les autres classes. Le code commun est placé dans la classe abstraite. les détails sont implémentés dans des sous-classes. Les méthodes des classes abstraites sont facultatives et certaines peuvent être définies comme des méthodes abstraites (c'est-à-dire des méthodes avec uniquement des noms de méthode mais aucun corps de méthode). Une classe abstraite doit contenir au moins une méthode abstraite, sinon toutes les méthodes sous sa déclaration seront considérées comme des méthodes abstraites. méthode courante.
Exemple :
abstract class Animal{ abstract function eat(); function sleep(){ echo "晚安,好梦!"; } }
Étant donné que les classes abstraites ne peuvent pas être instanciées, elles ne peuvent être implémentées que via des sous-classes. La sous-classe doit implémenter toutes les méthodes abstraites définies dans la classe abstraite, sinon la sous-classe le fera également. Doit être défini comme une classe abstraite.
Exemple :
class Cat extends Animal{ function eat(){ echo "吃小鱼干!"; } }
Dans le code ci-dessus, nous définissons une classe Cat
pour hériter de la classe Animal
, et en même temps dans la classe Cat classe code> La méthode <code>eat()
est implémentée afin que nous puissions accéder aux méthodes d'implémentation spécifiques dans cette classe abstraite via la classe Cat
. Cat
类去继承Animal
类,同时在Cat
类中实现了eat()
方法,这样我们就可以通过Cat
类来访问这个抽象类中的具体实现方法。
二、常规接口
常规的接口是PHP中的另一种形式的接口。常规接口可以有方法和常量,在接口中定义的所有方法都必须由任何类去实现,否则就会产生致命的错误。通过实现某个接口的类来使该类可以访问接口中的定义的方法和常量。
在PHP中,我们可以定义一个常规接口,并在其中指定需要实现的方法:
interface IAnimal{ public function eat(); public function run(); }
在这个代码片段中,我们定义了一个IAnimal
接口,并在其中指定了需要实现的两个方法——eat()
和run()
。
在实现常规接口时,实现一个接口时必须实现其中定义的所有方法,否则就会产生编译错误。
示例:
class Dog implements IAnimal{ function eat(){ echo "吃骨头!"; } function run(){ echo "追皮球!"; } }
在上面的代码片段中,我们定义了一个Dog
类,实现了IAnimal
接口,并在其中实现了接口中定义的两个方法——eat()
和run()
rrreee
Dans cet extrait de code, nous définissons une interfaceIAnimal
, et spécifie deux méthodes qui doivent être implémentées - eat()
et run()
.
rrreee
Dans l'extrait de code ci-dessus, nous définissons une classeDog
, implémentons l'interface IAnimal
et implémentons les deux définies dans l'interface Méthodes - manger()
et run()
.
Les interfaces conventionnelles peuvent améliorer la réutilisabilité du code ;
Les interfaces conventionnelles peuvent réduire le couplage entre les codes et augmenter la maintenabilité du code
Les interfaces conventionnelles peuvent être utilisées par plusieurs classes. Implémenter et fournir un système unifié ; interface pour augmenter l’évolutivité du code.
3. La différence entre l'interface de classe abstraite et l'interface conventionnelle 🎜🎜🎜Définition et utilisation 🎜🎜🎜La façon de définir l'interface de classe abstraite et l'interface conventionnelle est différente. L'interface de classe abstraite est définie et implémentée via une classe abstraite, tout en étant régulière. les interfaces sont directement définies et implémentées. 🎜🎜Les interfaces de classe abstraite sont implémentées par héritage, tandis que les interfaces régulières sont implémentées en implémentant toutes les méthodes définies dans l'interface. 🎜🎜🎜La différence entre les classes abstraites et les classes régulières🎜🎜🎜Les classes abstraites peuvent avoir des méthodes ordinaires et des méthodes abstraites, tandis que les interfaces régulières ne peuvent définir que des méthodes abstraites ;🎜🎜Les classes abstraites doivent être implémentées par héritage, tandis que les interfaces régulières peuvent être implémentées par Implémentation de plusieurs classes ; 🎜🎜Les méthodes abstraites des classes abstraites doivent être implémentées par des sous-classes, et toute classe qui implémente une interface régulière doit implémenter toutes les méthodes de l'interface sous la même forme. 🎜🎜🎜Différences dans la sémantique de conception🎜🎜🎜Les interfaces de classes abstraites sont principalement utilisées pour fournir certains comportements courants ou méthodes d'organisation de la structure de données dans la conception de langages. Il peut y avoir une relation d'héritage ou une relation de combinaison entre une classe abstraite et ses sous-classes 🎜🎜Les interfaces conventionnelles sont principalement utilisées pour contraindre les protocoles de communication entre les objets dans la conception du langage ; Les interfaces régulières définissent certaines spécifications et méthodes publiques, qui sont implémentées par plusieurs classes. 🎜🎜Conclusion🎜🎜Qu'il s'agisse d'une interface de classe abstraite ou d'une interface régulière, ce sont des concepts très importants en PHP. L'interface de classe abstraite peut fournir une structure d'héritage flexible et prendre en charge l'implémentation par défaut des méthodes. Il est recommandé que les méthodes de la classe abstraite soient des méthodes communes entre les classes, tandis que l'interface conventionnelle standardise les noms de méthode de la classe ; que les méthodes de l'interface soient spécifiques entre les classes. Par conséquent, lors de la réalisation d’applications pratiques spécifiques, nous devons choisir différents types d’interfaces en fonction de scénarios d’utilisation spécifiques. 🎜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!