Maison > Article > développement back-end > Quelle est la différence entre l'héritage de classe et l'héritage d'interface en php
En PHP, la différence entre l'héritage de classe et l'héritage d'interface est la suivante : les classes PHP ne prennent pas en charge l'héritage multiple, c'est-à-dire que les sous-classes ne peuvent hériter que d'une seule classe parent, mais prennent en charge l'héritage à plusieurs niveaux, tandis que les interfaces prennent en charge l'héritage multiple, c'est-à-dire les interfaces peuvent être héritées. Une ou plusieurs interfaces.
L'environnement d'exploitation de cet article : système Windows 10, PHP version 7.1, ordinateur Dell G3.
Héritage de classe PHP :
1. Les classes PHP ne prennent pas en charge l'héritage multiple, c'est-à-dire que les sous-classes ne peuvent hériter que d'une seule classe parent, mais prennent en charge l'héritage à plusieurs niveaux.
Par exemple :
class frist{ public function __construct(){ echo "我是第一个类。","<br>"; } public function printer(){ echo "frist","<br>"; } } class seconds extends frist{} class third extends seconds{} $obj = new third(); $obj->printer();
Résultat : C'est le premier cours. Les deuxième et troisième classes de first ne remplacent pas la méthode Printer(). La méthode Printer() peut être appelée après l'instanciation de la troisième classe.
2. Problèmes d'autorisation d'héritage
(1) La méthode privée de la classe parent ne peut pas être héritée et la classe parent est privatisée
(2) La méthode protégée de la classe parent peut être héritée, mais ne peut pas être appelée par l'objet instancié. Si elle est appelée, erreur " Appel à la méthode protégée premier::printer()", la classe parent met cette méthode en mode protégé
(3) La méthode publique de la classe parent peut être héritée et appelée par l'objet instancié. objet, et c'est une méthode publique
( 4) Les sous-classes peuvent remplacer les méthodes publiques ou protégées de la classe parent, mais ne peuvent pas re-priver les méthodes si elles portent le même nom, elles ne peuvent être re-déclarées que dans cette classe.
3. Héritage de classe d'interface
(1) L'interface prend en charge l'héritage multiple et les méthodes de la classe d'interface Il n'est pas nécessaire d'implémenter telles que :
interface frist{ public function ex1(); } interface seconds{ public function ex2(); } interface third extends frist,seconds{ public function ex3(); } class fourth implements third{ public function ex1(){} public function ex2(){} public function ex3(){} } class fourth implements frist,seconds{ public function ex1(){} public function ex2(){} }
(2) Les autorisations de méthode de la classe d'interface sont publiques, et la valeur par défaut est public
(3) La classe qui référence l'interface doit implémenter toutes les méthodes de l'interface, sinon une erreur sera signalée, telle que : "La classe e contient 1 méthode abstraite et doit donc être déclarée abstraite ou implémentée les méthodes restantes", c'est-à-dire : la classe e contient 1 méthode abstraite, les méthodes restantes doivent donc être déclarées abstraites ou implémentées.
4. Classe abstraite : tant qu'une méthode dans une classe est une méthode abstraite, alors cette classe doit être définie comme une classe abstraite
(1) Les classes abstraites ne peuvent pas remplacer les méthodes de la classe parent.
(2) L'héritage de classe abstraite est une extension des méthodes de la classe parent.
(3) Toutes les méthodes abstraites des classes dérivées héritées doivent être surchargées avant de pouvoir être instanciées.
(4) La distribution ordinaire implémentée par les classes abstraites peut être appelée directement dans les sous-classes non abstraites.
5. Similitudes et différences entre les interfaces et les classes abstraites (faisant référence à la différence entre les classes abstraites et les interfaces)
(1) L'utilisation des interfaces est obtenue via le mot-clé Implements, et la clé de l'utilisation de l'héritage de classe est d'opérer de manière abstraite. classes Implémenté par word exotends
(2) L'interface n'a pas de données membres, mais la classe abstraite a des données membres et la classe abstraite peut implémenter l'encapsulation de données.
(3) L'interface n'a pas de constructeur, mais la classe abstraite peut avoir un constructeur.
(4) Les méthodes de l'interface sont toutes de type public, tandis que les méthodes de la classe abstraite peuvent être modifiées avec private, protected ou public.
(5) Une classe peut implémenter plusieurs interfaces en même temps, mais ne peut implémenter qu'une seule classe abstraite.
(6) Similitude : Rien ne peut être écrit dans le corps de la fonction, comme : function getName();.
Apprentissage recommandé : "Tutoriel vidéo PHP"
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!