Maison développement back-end tutoriel php Classes abstraites et interfaces en PHP

Classes abstraites et interfaces en PHP

Dec 02, 2017 pm 01:39 PM
php 抽象 接口

Dans le développement actuel de PHP, nous utiliserons souvent des classes abstraites PHP et des interfaces Aujourd'hui, nous en parlerons en détail Quels sont les résumés. classes et interfaces de PHP à propos.

1. Classe abstraite classe abstraite

1. Une classe abstraite fait référence à une classe avec le mot-clé abstrait ajouté avant la classe et une méthode abstraite (le mot-clé abstrait ajouté avant le mot-clé fonction de la méthode de classe).

2. Les classes abstraites ne peuvent pas être instanciées directement. La classe abstraite définit uniquement (ou implémente partiellement) les méthodes requises par la sous-classe. Les sous-classes peuvent rendre concrète une classe abstraite en en héritant et en implémentant toutes les méthodes abstraites de la classe abstraite.

3. Si une sous-classe doit être instanciée, elle doit implémenter toutes les méthodes abstraites de la classe abstraite. Si la sous-classe n'implémente pas toutes les méthodes abstraites de la classe abstraite, alors la sous-classe est également une classe abstraite et doit être précédée du mot-clé abstract dans la classe et ne peut pas être instanciée.

Classe abstraite A

abstract class A  
{  
    /** 抽象类中可以定义变量 */  
    protected $value1 = 0;  
    private $value2 = 1;  
    public $value3 = 2;  
    /** 也可以定义非抽象方法 */  
    public function my_print()  
    {  
        echo "hello,world/n";  
    }  
    /** 
     * 大多数情况下,抽象类至少含有一个抽象方法。抽象方法用abstract关键字声明,其中不能有具体内容。 
     * 可以像声明普通类方法那样声明抽象方法,但是要以分号而不是方法体结束。也就是说抽象方法在抽象类中不能被实现,也就是没有函数体“{some codes}”。 
     */  
    abstract protected function abstract_func1();  
    abstract protected function abstract_func2();  
}  
abstract class B extends A  
{  
    public function abstract_func1()  
    {  
       echo "implement the abstract_func1 in class A/n";  
    }  
    /** 这么写在zend studio 8中会报错*/  
    //abstract protected function abstract_func2();  
}  
class C extends B  
{  
    public function abstract_func2()  
    {  
       echo "implement the abstract_func2 in class A/n";  
    }  
}
Copier après la connexion

4. Si vous créez une sous-classe B qui hérite de A comme suit, mais n'implémente pas la méthode abstraite abstract_func() :

Class B extends A{};
Copier après la connexion

, alors le programme aura l'erreur suivante :

Fatal error: Class B contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (A::abstract_func)
Copier après la connexion

5. Si B implémente la méthode abstraite abstract_func(), alors le contrôle d'accès de la méthode abstract_func() dans B ne peut pas être plus strict que le contrôle d'accès de abstract_func() dans A, c'est-à-dire :

( 1) Si abstract_func() dans A est déclaré public, alors la déclaration de abstract_func() dans B ne peut être que publique, non protégée ou privée

(2) Si abstract_func() dans A est déclaré comme protégé, alors La déclaration de abstract_func() dans B peut être publique ou protégée, mais elle ne peut pas être privée

(3) Si abstract_func() dans A est déclarée comme privée, hehe, elle ne peut pas être défini comme privé ! (Erreur fatale : la fonction abstraite A::abstract_func() ne peut pas être déclarée privée)

2. Les classes abstraites fournissent des normes pour une implémentation concrète, tandis que les interfaces sont de purs modèles. Les interfaces définissent uniquement les fonctions, pas le contenu de l'implémentation. Les interfaces sont déclarées avec le mot-clé interface. 2. L'interface est complètement abstraite. Elle ne peut déclarer que des méthodes et uniquement des méthodes publiques. Elle ne peut pas déclarer de méthodes privées et protégées, ne peut pas définir de corps de méthode et ne peut pas déclarer de variables d'instance. Cependant, l'interface peut déclarer des variables constantes. Mais placer des variables constantes dans l'interface viole le but de son existence en tant qu'interface et confond également les différentes valeurs de l'interface et des classes. Si vous en avez vraiment besoin, vous pouvez le mettre dans la classe abstraite ou la classe correspondante.

3. Toute classe qui implémente une interface doit implémenter toutes les méthodes définies dans l'interface

sinon la classe doit être déclarée abstraite.

interface iA  
{  
    const AVAR=3;  
    public function iAfunc1();  
    public function iAfunc2();  
}  
echo iA:: AVAR;
Copier après la connexion

4. Une classe peut implémenter une interface en utilisant le mot clé Implements dans sa déclaration. Après cela, le processus spécifique d'implémentation de l'interface est le même que l'héritage d'une classe abstraite qui ne contient que des méthodes abstraites. Une classe peut hériter d'une classe parent et implémenter n'importe quel nombre d'interfaces en même temps. La clause extends doit précéder la clause Implements. PHP ne prend en charge que l'héritage d'une classe parent, le mot-clé extends ne peut donc être suivi que d'un nom de classe.

class E implements iA  
{  
    public function iAfunc1(){echo "in iAfunc1";}  
    public function iAfunc2(){echo "in iAfunc2";}  
}
Copier après la connexion

5. Une interface ne peut pas implémenter une autre interface, mais elle peut hériter de plusieurs

abstract class E implements iA{}
Copier après la connexion

interface iB  
{  
    public function iBfunc1();  
    public function iBfunc2();  
}  
class D extends A implements iA,iB  
{  
    public function abstract_func1()  
    {  
       echo "implement the abstract_func1 in class A/n";  
    }  
    public function abstract_func2()  
    {  
       echo "implement the abstract_func2 in class A/n";  
    }  
    public function iAfunc1(){echo "in iAfunc1";}  
    public function iAfunc2(){echo "in iAfunc2";}  
    public function iBfunc1(){echo "in iBfunc1";}  
    public function iBfunc2(){echo "in iBfunc2";}  
}  
   
class D extends B implements iA,iB  
{  
    public function abstract_func1()  
    {  
       parent::abstract_func1();  
       echo "override the abstract_func1 in class A/n";  
    }  
    public function abstract_func2()  
    {  
       echo "implement the abstract_func2 in class A/n";  
    }  
    public function iAfunc1(){echo "in iAfunc1";}  
    public function iAfunc2(){echo "in iAfunc2";}  
    public function iBfunc1(){echo "in iBfunc1";}  
    public function iBfunc2(){echo "in iBfunc2";}  
}
Copier après la connexion
3. Similitudes et différences entre les classes abstraites et les interfaces

interface iC extends iA,iB{}  
class F implements iC  
{  
    public function iAfunc1(){echo "in iAfunc1";}  
    public function iAfunc2(){echo "in iAfunc2";}  
    public function iBfunc1(){echo "in iBfunc1";}  
    public function iBfunc2(){echo "in iBfunc2";}  
}
Copier après la connexion

1 . Similitudes : (1) Les deux sont des classes abstraites et ne peuvent pas être instanciées. (2) La classe d'implémentation d'interface et les sous-classes de la classe abstraite doivent implémenter les méthodes abstraites déclarées.

2. Différences :

(1) L'interface doit être implémentée, en utilisant Implements , tandis que la classe abstraite doit être héritée, en utilisant extends .

(2) Une classe peut implémenter plusieurs interfaces, mais une classe ne peut hériter que d'une seule classe abstraite.

(3) L'interface met l'accent sur la mise en œuvre de fonctions spécifiques, tandis que la classe abstraite met l'accent sur la relation de propriété.

(4) Bien que les classes d'implémentation d'interface et les sous-classes de classe abstraite doivent implémenter les méthodes abstraites correspondantes, les formes d'implémentation sont différentes. Chaque méthode dans l'interface est une méthode abstraite, qui est uniquement déclarée (déclaration, pas de corps de méthode) et la classe d'implémentation doit l'implémenter. Les sous-classes de la classe abstraite peuvent être implémentées de manière sélective. Ce choix a deux implications : a) Toutes les méthodes de la classe abstraite ne sont pas abstraites. Seules les méthodes avec abstract sont abstraites et doivent être implémentées par des sous-classes. Pour les méthodes sans résumé, le corps de la méthode doit être défini dans la classe abstraite ; b) Lorsqu'une sous-classe de la classe abstraite en hérite, elle peut directement hériter ou remplacer les méthodes non abstraites ; être laissé à ses sous-classes pour l'implémentation, mais cette classe doit également être déclarée abstraite. Puisqu’il s’agit d’une classe abstraite, elle ne peut bien sûr pas être instanciée.

(5) La classe abstraite est l'intermédiaire entre l'interface et la classe. la classe abstraite joue un rôle de connexion dans l'interface et la classe. D'une part, la classe abstraite est abstraite et peut déclarer des méthodes abstraites pour standardiser les fonctions que les sous-classes doivent implémenter. D'autre part, elle peut définir des corps de méthode par défaut pour une utilisation directe ou un remplacement par les sous-classes. De plus, il peut définir ses propres variables d'instance à utiliser par les sous-classes via l'héritage.

(6) Le mot-clé abstract ne peut pas être ajouté devant la méthode abstraite dans l'interface. La méthode abstraite est implicite par défaut, et le mot-clé final ne peut pas être ajouté pour empêcher l'héritage des méthodes abstraites. Dans une classe abstraite, abstract doit être ajouté avant la méthode abstraite pour indiquer qu'elle est explicitement déclarée comme méthode abstraite.

(7) Les méthodes abstraites dans les interfaces sont publiques par défaut et ne peuvent être publiques qu'elles ne peuvent pas être modifiées avec des modificateurs privés ou protégés. Les méthodes abstraites des classes abstraites peuvent être modifiées avec public et protected, mais ne peuvent pas être modifiées avec private.

3. Occasions d'application de l'interface

(1) Les classes ont besoin d'interfaces spécifiques pour la coordination, quelle que soit la manière dont elles sont mises en œuvre.

(2) existe en tant qu'identifiant qui peut implémenter une fonction spécifique, ou il peut s'agir d'un pur identifiant sans aucune méthode d'interface.

(3) Il est nécessaire de traiter un groupe de classes comme une seule classe, et l'appelant ne contacte ce groupe de classes que via l'interface.

(4) Il est nécessaire d'implémenter plusieurs fonctions spécifiques, et ces fonctions peuvent n'avoir aucun lien.

4. Occasions d'application de la classe abstraite

En un mot, vous pouvez l'utiliser lorsque vous avez besoin à la fois d'une interface unifiée et de variables d'instance ou de méthodes par défaut. Les plus courants sont :

(1) définit un ensemble d'interfaces, mais ne veut pas forcer chaque classe d'implémentation à implémenter toutes les interfaces. Vous pouvez utiliser une classe abstraite pour définir un ensemble de corps de méthode, ou même des corps de méthode vides, puis laisser les sous-classes choisir les méthodes qui les intéressent.

(2) Dans certains cas, les interfaces pures ne peuvent à elles seules satisfaire la coordination entre les classes. Des variables représentant les états de la classe sont également nécessaires pour distinguer différentes relations. Le rôle intermédiaire de l’abstrait peut très bien y répondre.

(3) Standardise un ensemble de méthodes mutuellement coordonnées, dont certaines sont communes, indépendantes de l'état et peuvent être partagées sans qu'il soit nécessaire que les sous-classes les implémentent séparément, tandis que d'autres méthodes nécessitent que chaque sous-classe les implémente ; selon son propre état spécifique pour réaliser des fonctions spécifiques.

Ce qui précède est tout le contenu des classes abstraites et des interfaces en PHP. J'espère que cela sera utile à tout le monde.

Recommandations associées :

Explication détaillée de la méthode d'implémentation de la classe abstraite php

php Explication détaillée de la différence entre les classes abstraites et les interfaces et sélection d'exemples

Explication détaillée des exemples de fonctionnalités de classe abstraite 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!

Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

7 fonctions PHP que je regrette de ne pas connaître auparavant 7 fonctions PHP que je regrette de ne pas connaître auparavant Nov 13, 2024 am 09:42 AM

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

Liaison statique (statique: :) ​​implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Apr 03, 2025 am 12:03 AM

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.

See all articles