Maison  >  Article  >  développement back-end  >  Introduction comparative à l'héritage de classe et à l'héritage d'interface en php

Introduction comparative à l'héritage de classe et à l'héritage d'interface en php

不言
不言avant
2018-10-10 17:02:183146parcourir

Le contenu de cet article est une introduction comparative à l'héritage de classe et à l'héritage d'interface en PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

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, tel que :

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) Le La méthode protégée de la classe parent peut être héritée Héritée, mais ne peut pas être appelée par des objets instanciés. Si elle est appelée, un message d'erreur "Appel à la méthode protégée premier::printer()" apparaîtra. La classe parent met cette méthode en mode protégé <.>

(3 ) Les méthodes publiques de la classe parent peuvent être héritées et appelées par des objets instanciés, et sont des méthodes publiques


(4) Les sous-classes peuvent remplacer les méthodes publiques ou protégées méthodes de la classe parent, et les méthodes ne peuvent pas être reprivées. Si le même nom est utilisé, il suffit de re-déclarer

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 n'ont pas besoin d'être implémentées :

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 toutes publiques et les. 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 rapportée, telle que : "La classe e contient 1 méthode abstraite et doit donc être déclarée abstraite ou implémenter les méthodes restantes", c'est-à-dire : la classe e contient 1 méthode abstraite, elle doit donc être déclarée abstraite ou implémenter les méthodes restantes.

4. Classe abstraite : tant qu'il y a une méthode abstraite dans une classe, alors cette classe doit être définie comme une classe abstraite

(1) La classe abstraite hérite et la classe abstraite ne peut pas remplacer la méthode de la classe parent.

(2) L'héritage de classe abstrait est l'expansion 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 grâce au mot-clé Implements et pour Abstract. classes L'opération est implémentée à l'aide du mot-clé exotends de l'héritage de classe

(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();.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer