Maison >développement back-end >Problème PHP >Quel est le rôle de la classe abstraite php

Quel est le rôle de la classe abstraite php

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼original
2019-08-28 13:27:265491parcourir

Quel est le rôle de la classe abstraite php

1. Qu'est-ce qu'une méthode abstraite ?

La méthode que nous définissons dans la classe sans corps de méthode est une méthode abstraite. Le soi-disant corps sans méthode signifie qu'il n'y a pas d'accolades ni de contenu à l'intérieur lors de la déclaration, mais en ajoutant directement un point-virgule après le nom de la méthode lors de la déclaration. De plus, lors de la déclaration d'une méthode abstraite, la méthode doit également ajouter un mot-clé. . "abstrait" à modifier.

Par exemple :

abstract function fun1(); 
abstract function fun2();

2. Qu'est-ce qu'une classe abstraite ?

Tant qu'une méthode dans une classe est une méthode abstraite, alors cette classe est définie comme une classe abstraite. Les classes abstraites doivent également être modifiées avec le mot-clé "abstract" ; ce sont des méthodes abstraites ou non et des attributs de membre, mais tant qu'une méthode est abstraite, la classe doit être déclarée comme classe abstraite et décorée avec "abstract".

Recommandations associées : "Tutoriel PHP"

Par exemple :

abstract class Demo
{ 
    var $test; 
    abstract function fun1();
    abstract function fun2(); 
    function fun3(){
        ...
    }
}

3. Quel est le rôle des classes abstraites ?

Dans l'exemple ci-dessus, une classe abstraite "demo" est définie et modifiée avec "abstract". Dans cette classe, un attribut membre "$test" et deux méthodes abstraites "fun1" sont définies. Il existe également une méthode non abstraite fun3() avec "fun2" ;

Alors, comment utilisons-nous les classes abstraites ? Le point le plus important est que les classes abstraites ne peuvent pas produire d'objets d'instance, elles ne peuvent donc pas être utilisées directement. Nous avons déjà mentionné à plusieurs reprises que les classes ne peuvent pas être utilisées directement via des classes.

Alors, à quoi sert de déclarer une classe abstraite si une classe abstraite ne peut pas produire d'objets instances ? Nous utilisons des méthodes abstraites comme modèles pour la surcharge des sous-classes.Définir une classe abstraite équivaut à définir une spécification.Cette spécification exige que les sous-classes soient conformes à la classe abstraite, elle ajoute l'abstraction dans la classe abstraite. par sous-classes. La sous-classe doit implémenter toutes les méthodes abstraites de la classe parent. Sinon, s'il y a encore des méthodes abstraites dans la sous-classe, la sous-classe sera toujours une classe abstraite et ne pourra pas instancier d'objets

Pourquoi avons-nous pour commencer Qu'en est-il de l'héritage dans les classes abstraites ? Parce que parfois si on veut implémenter certaines fonctions, on doit hériter d'une classe abstraite, sinon vous ne pourrez pas implémenter ces fonctions. Si vous héritez d'une classe abstraite, vous devez implémenter les méthodes abstraites dans la classe

Par exemple :

<?
abstract class Demo
{
    var $test; 
    abstract function fun1();
    abstract function fun2(); 
    function fun3() {
        ...
    }
} 
$demo=new Demo(); //抽象类不能产生实例对象,所以这样做是错的,实例化对象交给子类
 
class Test extends Demo
{
    function fun1() {
        ...
    } 
    function fun2() {
        ...
    }
} 
$test = new Test(); //子类可以实例化对象,因为实现了父类中所有抽象方法
?>

4 Caractéristiques des classes abstraites :

Les classes abstraites ne peuvent pas être instanciées et ne peuvent qu'être héritées.

Les classes abstraites n'ont pas nécessairement de méthodes abstraites. Une classe avec des méthodes abstraites doit être une classe abstraite.

La visibilité des méthodes abstraites ne peut pas être privée.

Les méthodes abstraites sont dans des sous-classes et doivent être réécrites.

5. Quand devez-vous utiliser des classes abstraites ?

Il existe une méthode, mais je ne sais pas comment écrire le corps de la méthode. Si cette méthode doit être incluse dans la sous-classe, elle doit être encapsulée dans une méthode abstraite et la classe doit l'être. une classe abstraite.

Lorsque certaines méthodes doivent être encapsulées dans une sous-classe de contrôle, des méthodes abstraites peuvent être utilisées.

Quand il est nécessaire de contrôler une classe qui ne peut être qu'héritée et ne peut pas être instanciée.

6. Interface

Si toutes les méthodes d'une classe sont des méthodes abstraites et n'ont aucun attribut de membre, alors cette classe est appelée une interface.

interface Common{
    abstract function work();
    abstract function test($args);
}

Héritage d'interface (étend) :

Le nom de l'interface d'interface d'héritage d'interface étend le nom de l'interface parent

Remarque : l'héritage de classe est un héritage unique (il ne peut y avoir qu'une seule classe parent ), mais l'héritage de l'interface est un héritage multiple, et l'implémentation de l'interface par la classe est également une implémentation multiple.

Implémentations d'interface :

La classe implémente le nom de classe de classe d'interface implémente le nom d'interface 1, le nom d'interface 2, ...

Les classes héritées implémentent les interfaces en même temps :

Une classe hérite de la classe parent et implémente l'interface en même temps. Le nom de la classe de classe étend le nom de la classe parent implémente le nom de l'interface

7.

Interface est une classe abstraite spéciale dont l'interface ne contient que des méthodes abstraites et aucun attribut de membre. Lorsqu'une classe implémente une interface, elle doit implémenter entièrement toutes les méthodes de l'interface ;

Lorsqu'une classe hérite (étend) d'une classe abstraite, il lui suffit de réécrire les méthodes abstraites qui doivent être utilisées. Les classes abstraites ne peuvent avoir qu'un seul héritage, mais les interfaces ont plusieurs héritages, et l'implémentation de l'interface par la classe a également plusieurs implémentations.

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