Maison  >  Article  >  développement back-end  >  Explication détaillée de ma compréhension de l'orientation objet en PHP

Explication détaillée de ma compréhension de l'orientation objet en PHP

零下一度
零下一度original
2017-07-03 09:33:481456parcourir

Avant-propos :

Aujourd'hui, je vais vous présenter la nature orientée objet de PHP. En parlant d'orientation objet, je dois mentionner l'orientation processus, car lorsque j'étais débutant, je ne pouvais souvent pas faire la différence. Alors, quelle est la différence entre l’orienté objet et l’orienté processus ? Laissez-moi vous donner une brève introduction ci-dessous :

Orienté objet Concentrez-vous sur quel objet gère un problème.

Sa plus grande caractéristique est qu'il se compose de classes avec des attributs et des fonctions, et que des objets peuvent être obtenus à partir des classes pour résoudre des problèmes.

Orienté processus Se concentrer sur le processus de résolution d'un problème. La plus grande caractéristique est qu'une série de processus sont utilisés pour résoudre ce problème un par un.

Après avoir compris la différence entre orienté objet et orienté processus, apprenons les connaissances de base du PHP orienté objet.

***Mots-clés de ce chapitre : Bases orientées objet, encapsulation et héritage, mots-clés PHP, singletons, sérialisation d'objets et magie méthodes, classes abstraites et méthodes abstraites, interfaces et polymorphisme.

Ce que vous devez savoir~~~ Il y a trois caractéristiques majeures du PHP orienté objet que nous devons connaître : l'héritage ;

一、面向对象基础
1. Bases orientées objet

Orienté objet

1. Qu'est-ce qu'un cours ?
Une collection d'une série d'individus ayant les mêmes attributs (caractéristiques) et méthodes (comportement). Une classe est un concept abstrait.

2. Qu'est-ce qu'un objet ?
L'individu avec des valeurs d'attribut spécifiques obtenues à partir de la classe est appelé un objet. L'objet est un individu spécifique.
par exemple : humain Zhang San

3. Quelle est la relation entre les classes et les objets ?
Une classe est une abstraction d'un objet ! Les objets sont la réification des classes !
La classe indique uniquement les attributs de ce type d'objet, mais elle ne peut pas avoir de valeurs spécifiques, la classe est donc abstraite.
L'objet est un individu spécifique après avoir attribué tous les attributs de la classe.

2. Déclaration et instanciation de classe
1. Comment déclarer une classe :
classe nom de classe {
Modificateur d'accès $property[=default];
Méthode de fonction [Modificateur d'accès](){}
}

2. Choses à noter lors de la déclaration d'une classe :
① Le nom de la classe ne peut être composé que de lettres, de chiffres et de traits de soulignement. Il ne peut pas commencer par un chiffre et doit être conforme. avec la règle du gros chameau. ;
②Le nom de la classe doit être modifié avec la classe, et il ne doit pas y avoir de () après le nom de la classe ;
③Les attributs doivent avoir les modificateurs d'accès et les méthodes peuvent être sans modificateur d'accès.

3. Appel d'objets instanciés et de méthodes d'attribut d'objet :
$object name = new class name ( //() peut être omis

Appeler des propriétés et des méthodes depuis l'extérieur de la classe :
$object name-> $property name; le nom de la propriété Le symbole $ ne peut pas être utilisé

pour appeler des attributs et des méthodes au sein de la classe :
$this -> >

3. Constructeur

1. Qu'est-ce qu'un constructeur ?
Le constructeur est une fonction spéciale dans une classe. Lorsque l'on utilise le mot-clé new pour instancier un objet, cela équivaut à appeler le constructeur de la classe.

2. Quelle est la fonction du constructeur ?

Lors de l'instanciation d'un objet, celui-ci est automatiquement appelé et utilisé pour attribuer des valeurs initiales aux propriétés de l'objet !

3. Comment écrire le constructeur :
①Le nom du constructeur doit être le même que le nom de la classe
[public] fonction Personne ($name){
$this -> name = $name;
}
②Utilisez la méthode magique __construct
[public] function __construct($name){
$this -> nom = $name;
}
4. Notes sur les constructeurs :
① La première façon d'écrire, le nom du constructeur doit être le même que la classe ! ! ! !
②Si une classe n'a pas de constructeur manuscrit, le système aura un constructeur de paramètre vide par défaut, vous pouvez donc utiliser new Person();
Si nous écrivez un constructeur avec Parameter constructor, il n'y aura plus de constructeur de paramètres vide, c'est-à-dire que new Person() ne peut pas être utilisé directement
La liste de paramètres dans () après Person doit répondre aux exigences ; du constructeur ! ! ! !
③Si les deux constructeurs existent en même temps, __construct sera utilisé.

5. Destructeur : __destruct() :
①Le destructeur est automatiquement appelé avant que l'objet ne soit détruit et libéré
②Le destructeur ne peut prendre aucun paramètre ;
③Le destructeur est souvent utilisé pour libérer des ressources, fermer des ressources, etc. après l'utilisation de l'objet.

6. Méthode magique :
PHP nous fournit une série de fonctions commençant par __. Ces fonctions n'ont pas besoin d'être appelées manuellement, sera automatiquement appelé au bon moment. Ce type de fonction est appelé magie et s'appelle une fonction magique.
par exemple : la fonction __construct(){} est automatiquement appelée lorsqu'un nouvel objet est créé
la fonction __destruct(){} est automatiquement appelée lorsque l'objet est détruit
🎜>
Nous exigeons que, à l'exception des méthodes magiques, les fonctions et méthodes personnalisées ne puissent pas commencer par __.

Enfin, généralement pour les classes avec des fonctions plus complexes, nous les écrirons dans un fichier de classe séparé.
Nommez le fichier de classe dans la même casse, utilisez la méthode "nom de classe lowercase.class.php".
Lorsque vous utilisez cette classe dans d'autres fichiers, vous pouvez utiliser include pour importer ce fichier ".class.php".

2. Encapsulation et héritage
二、封装和继承

1. Qu'est-ce que l'encapsulation ?
Utilisez des modificateurs d'accès pour privatiser les propriétés et les méthodes de la classe qui ne nécessitent pas d'accès externe pour réaliser le contrôle d'accès.

*Remarque : Il s'agit de mettre en œuvre le contrôle d'accès, et non de refuser l'accès. En d'autres termes, après avoir privatisé les attributs, nous devons fournir les méthodes correspondantes afin que les utilisateurs puissent traiter les attributs via les méthodes que nous fournissons.

2. Quel est le rôle de l'encapsulation ?
① Les utilisateurs ne se soucient que des fonctions que la classe peut fournir et ne se soucient pas des détails de l'implémentation des fonctions ! (Méthode d'encapsulation)
② Contrôlez les données de l'utilisateur, empêchez la définition de données illégales et contrôlez les données renvoyées à l'utilisateur (encapsulation d'attribut + méthode set/get)

3. Mettre en œuvre l'opération d'encapsulation ?
①Encapsulation de méthode
Pour certaines méthodes qui ne sont utilisées qu'à l'intérieur de la classe et ne sont pas fournies pour un usage externe, nous pouvons alors utiliser private pour de telles méthodes Processus de privatisation.
fonction privée formatName(){} //Cette méthode ne peut être utilisée qu'au sein de la classe utilisant $this pour appeler la
fonction showName(){
$this -> formatName();
}
②Encapsulation d'attribut + méthode set/get
Dans afin de contrôler Pour la définition et la lecture des attributs, vous pouvez privatiser les attributs et demander aux utilisateurs de les définir via les méthodes set/get que nous fournissons
private $age;
function setAge($age){
$this->age=$age;
}
function getAge(){
return $this->age;
}
$object->getAge();
$Object->setAge(12);

③Encapsulation d'attribut + méthode magique
private $age;
fonction __get($key){
return $this->$key;
}
fonction __set( $key,$value){
$this->$key=$value;
}
$ objet -> ;age; //Lors de l'accès aux propriétés privées de l'objet, la méthode magique __get() est automatiquement appelée et le nom de la propriété accédée est transmis à la méthode __get()
$Object- ; > age=12; //Lors de la définition des attributs privés de l'objet, la méthode magique __set() est automatiquement appelée et le nom et la valeur de l'attribut définis sont transmis à la méthode __set() ; > Remarque : Dans la méthode magique, vous pouvez utiliser la structure de branche pour déterminer la différence entre $key et effectuer différentes opérations.

4. Concernant la méthode magique d'encapsulation :
①__set($key,$value) : Appelé automatiquement lors de l'attribution d'une valeur à une propriété privée de classe, en passant deux paramètres à la méthode lors de l’appel : le nom et la valeur de l’attribut qui doivent être définis.
②__get($key,$value) : Appelé automatiquement lors de la lecture des attributs privés de la classe lors de l'appel, passez un paramètre à la méthode, le nom de l'attribut qui doit être lu ;
③__isset($key) : automatiquement appelé lorsque la fonction isset() est utilisée en externe pour détecter des attributs privés.
>>> Utilisez isset(); en dehors de la classe pour détecter les propriétés privées, qui ne sont pas détectées par défaut. false
>>>Nous pouvons donc utiliser la fonction __isset(); pour renvoyer le résultat de la détection interne lorsqu'elle est automatiquement appelée.
fonction __isset($key){
return isset($this -> $key);
}
Lorsque isset externe ($object name->private attribut); est utilisé pour la détection, le résultat renvoyé par __isset() ci-dessus sera automatiquement appelé !

④__unset($key) : automatiquement appelée lorsque la fonction unset() est utilisée en externe pour supprimer des attributs privés ;
function __unset($key){
non défini($this -> $key);
}
Lorsque non défini($nom de l'objet->propriété privée est utilisé en externe ); Lors de la suppression d'un attribut, le nom de l'attribut est automatiquement transmis à __unset() et transmis à cette méthode magique pour traitement.


[Connaissances de base en matière d'héritage]
1.Comment mettre en œuvre l'héritage ?
Utilisez le mot-clé extends pour la sous-classe pour permettre à la sous-classe d'hériter de la classe parent ;
class Student extends Person{}

2. Choses à noter lors de la mise en œuvre de l'héritage ?
①Les sous-classes ne peuvent hériter que des propriétés non privées de la classe parent.
②Après qu'une sous-classe hérite d'une classe parent, cela équivaut à copier les attributs et les méthodes de la classe parent dans la sous-classe, qui peut être appelée directement en utilisant $this.
③PHP ne peut hériter que d'une seule classe et ne prend pas en charge une classe héritant de plusieurs classes. Mais une classe possède plusieurs niveaux d’héritage.
classe Personne{}
classe Adulte étend la personne{}
classe Étudiant étend l'adulte{}
//La classe Étudiant a les attributs et les méthodes de la classe Adulte et de la classe Personne

3. Couverture des méthodes (réécriture de méthodes)
. Première condition : la sous-classe hérite de la classe parent
Deuxième condition : la sous-classe remplace la méthode existante de la classe parent

qui remplit les deux conditions ci-dessus, ce qu'on appelle le remplacement de méthode. Après le remplacement, lorsqu'une sous-classe appelle une méthode, la propre méthode de la sous-classe sera appelée.
De même, en plus des remplacements de méthodes, les sous-classes peuvent également avoir des attributs portant le même nom que la classe parent pour les remplacements d'attributs.

Si la sous-classe remplace la méthode de la classe parent, comment appeler la méthode de la classe parent du même nom dans la sous-classe ?

partent::method name();
Par conséquent, lorsqu'une sous-classe hérite d'une classe parent, cela doit être la première étape de la construction de la sous-classe, appelez d'abord le constructeur de la classe parent pour copier.

fonction __construct($nom,$sexe,$école){
partent::__construct($nom,$sexe);
$this -> école = $école;
}

三、PHP关键字

1. final
①classe finale modifiée, cette classe est la classe finale et ne peut pas être héritée !
②méthode de modification finale, cette méthode est la méthode finale et ne peut pas être remplacée !
③final ne peut pas modifier les attributs.

2. static
① peut modifier les attributs et les méthodes, qui sont respectivement appelés attributs statiques et méthodes statiques, également appelés attributs de classe et méthodes de classe
②Les propriétés statiques et les méthodes statiques ne peuvent être appelées que directement en utilisant le nom de la classe.
Utilisez "nom de classe ::$propriété statique", "nom de classe ::méthode statique()"
Personne ::$sex ; );
③Les propriétés et méthodes statiques seront déclarées lors du chargement de la classe, avant la génération de l'objet.
④ Dans les méthodes statiques, les propriétés ou méthodes non statiques ne peuvent pas être appelées ;
Dans les méthodes non statiques, les propriétés et méthodes statiques peuvent être appelées ;
(Étant donné que les attributs et méthodes statiques ont été générés lors du chargement de la classe, les méthodes d'attributs non statiques n'ont pas encore été instanciées)
⑤Dans la classe, vous pouvez utilisez le mot-clé self pour faire référence au nom de cette classe.
classe Personne{
static $sex = "nan";
function say(){
echo self::$sex;
}
}
⑥Les propriétés statiques sont partagées, c'est-à-dire que les nouvelles produisent beaucoup Les objets partagent également une propriété.

3. mot-clé const :
Déclarez les constantes dans la classe, pas la fonction définir() ! Le mot clé const doit être utilisé.
Semblable à l'instruction definition(), le mot-clé const ne peut pas être utilisé pour déclarer des constantes avec $, et doit être entièrement en majuscule !
Une fois qu'une constante est déclarée, elle ne peut plus être modifiée. Lors de l'appel, tout comme statique, utilisez le nom de la classe pour appeler Person::constant.

4. Opérateur instanceof :
Détecte si un objet est une instance d'une certaine classe. (Y compris les pères, grands-parents, arrière-grands-pères...)
$zhangsan instanceof Person;

[Court résumé] Plusieurs opérateurs spéciaux
1. ne peut connecter que des chaînes ; "".""
2 => value"]
3. -> L'objet (objet de $this new) appelle les propriétés des membres et les méthodes des membres ;
4. ::
①Utilisez le mot-clé parent pour appeler la méthode du même nom dans la classe parent : parent::say();
②Utilisez le nom de la classe (et self) pour appeler la méthode statique dans la classe Propriétés, méthodes statiques et constantes.

4. Singleton
四、单例

Le mode singleton est également appelé mode monomorphe.
Il est garanti qu'une classe ne peut avoir qu'une seule instance d'objet.

Points d'implémentation :
① Le constructeur est privé et le mot-clé new ne peut pas être utilisé pour créer des objets.
② Fournissez des méthodes externes pour obtenir des objets et déterminez si l'objet est vide dans la méthode.
S'il est vide, créez l'objet et renvoyez-le ; s'il n'est pas vide, renvoyez-le directement.
③Les attributs de l'objet instance et la méthode d'obtention de l'objet doivent être statiques.
④ Après cela, les objets ne peuvent être créés qu'en utilisant les méthodes statiques que nous fournissons.
par exemple :$s1 = Singleton::getSingle();

5. Sérialisation d'objets et méthodes magiques
五、对象串行化和魔术方法

***Mots clés : clone et __clone, __antoload(), sérialisation et désérialisation (sérialisation et désérialisation), contraintes de type, méthode magique small Résumé (12)


1. clone et __clone
1 Lorsque vous utilisez = pour parler d'un objet et l'attribuer à un autre objet, ce qui est attribué est en fait l'adresse de l'objet. .
Deux objets pointent vers la même adresse, donc si un objet change, l'autre changera également.
par exemple : $lisi = $zhangsan;
2 Si vous souhaitez cloner complètement un objet à partir d'un autre objet, les deux objets sont indépendants et indépendants l'un de l'autre. autre. Pour les interférences,
doit utiliser le mot-clé clone
par exemple : $lisi = clone $zhangsan ; //Les deux objets n'interfèrent pas l'un avec l'autre ;
3. __clone() :
① Lorsque vous utilisez le mot-clé clone pour cloner un objet, la fonction clone est automatiquement appelée. La fonction
②__clone(), similaire au constructeur utilisé lors du clonage, peut attribuer une valeur initiale au nouvel objet cloné.
③$this dans la fonction __clone() fait référence à l'objet nouvellement cloné
Dans certaines versions, vous pouvez utiliser $that pour faire référence à l'objet cloné In. dans la plupart des cas, non pris en charge par la plupart des versions.
4. __toString()
Lorsque vous utilisez echo et d'autres instructions de sortie pour imprimer directement des objets, appelez echo $zhangsan;
Ensuite , Vous pouvez spécifier la chaîne renvoyée par la fonction __toString() ;
function __toString(){
return "haha";
}
echo $zhangsan; //Le résultat est : haha

5. définie dans la classe appelante ou la méthode non divulguée, la méthode __call() sera automatiquement exécutée.
Lorsqu'ils sont exécutés automatiquement, deux paramètres seront transmis à la méthode __call()
Paramètre 1 : Le nom de la méthode appelée
Paramètre deux : (tableau) liste des paramètres de la méthode appelante.
2. __antoload()

①C'est la seule méthode magique qui n'est pas utilisée dans une classe
②Quand Lors de l'instanciation d'une classe inexistante, cette méthode magique est automatiquement appelée
③Lorsqu'elle est appelée, un paramètre est automatiquement passé à __autoload() : le nom de la classe instanciée
Vous pouvez donc utiliser cette méthode pour implémenter la fonction de chargement automatique des fichiers.
fonction __autoload($className){
include "class/".strtolower($className).".class.php";
}
$zhangsan=new Person();//Il n'y a pas de classe Person dans ce fichier, et __autoload() sera automatiquement exécuté pour charger le fichier person.class.php

3. Sérialisation et désérialisation (sérialisation et désérialisation)
1. Sérialisation : convertir l'objet en caractère via une série d'opérations. Le processus de chaîne est appelé sérialisation ; >
(les objets s'enregistrent en écrivant des valeurs décrivant leur statut)
2. Désérialisation : Le processus de conversion d'une chaîne sérialisée en objet est appelé désérialisation ; 3. Quand faut-il utiliser la sérialisation ?
①Quand des objets doivent être transmis sur le réseau
②Quand des objets doivent être conservés dans des fichiers ou des bases de données
4. implémenter la sérialisation et la désérialisation
Sérialisation : $str=serialize($zhangsan);
Désérialisation : $duixiang=unserialize ($str);
5. Méthode magique __sleep() :
① Lorsque l'objet est sérialisé, la fonction __sleep() sera automatiquement exécutée
②__sleep() ; nécessite de renvoyer un tableau. Les valeurs du tableau sont des attributs qui peuvent être sérialisés ; les attributs qui ne sont pas dans le tableau ne peuvent pas être sérialisés ;
return array("name","age"); //Seuls les deux attributs nom/âge peuvent être sérialisés.
}
6. Méthode magique __wakeup()
① Appelée automatiquement lors de la désérialisation d'une méthode object_ _wakeup() ;

②Lorsqu'il est automatiquement appelé, il est utilisé pour réaffecter les nouveaux attributs d'objet générés par la désérialisation.
fonction __wakeup(){
$this -> name = "李思";
}
4. Contraintes de type
1. Contraintes de type : fait référence à l'ajout d'un type de données à une variable pour contraindre la variable à stocker uniquement le type de données correspondant.

(Cette opération est courante dans les langages fortement typés. En PHP, seules les contraintes de type pour les tableaux et les objets peuvent être implémentées)
2. certaine classe, alors les objets de cette classe et les sous-classes de cette classe peuvent passer.
3. En PHP, les contraintes de type ne peuvent apparaître que dans les paramètres formels des fonctions.
class Person{}
class Student extends Person{}
function func(Person $p){ //Fonction de contrainte formelle paramètres, n'acceptez que la classe Person et la sous-classe Person
echo "1111";
echo $p -> name;
}
func(nouvelle personne()); √
func(nouvel étudiant()); √
func(" 111"); ※Classe de base : classe parent
※※※ Classe dérivée : sous-classe

5. Résumé des méthodes magiques
1. __construct() : Constructeur, automatiquement appelé lors de la création d'un objet.
2. __destruct() : destructeur, appelé automatiquement avant la destruction d'un objet.
3. __get() : automatiquement appelé lors de l'accès aux propriétés privées de la classe. Passez le nom de l'attribut lu et renvoyez $this->Nom de l'attribut
4 __set() : automatiquement appelé lors de l'attribution d'une valeur à un attribut privé de la classe. Transmettez le nom de l'attribut et la valeur de l'attribut qui doivent être définis ;
5. __isset() : automatiquement appelé lors de l'utilisation d'isset() pour détecter les attributs privés de l'objet. Transmettez le nom de l'attribut détecté et retournez isset($this -> nom de l'attribut);
6. __unset() : automatiquement appelé lors de l'utilisation d'unset() pour supprimer les attributs privés de l'objet. Transmettez le nom de l'attribut supprimé et exécutez unset($this -> nom de l'attribut);
7 __toString() : automatiquement appelé lors de l'utilisation de echo pour imprimer l'objet. Renvoie le contenu que vous souhaitez afficher lors de l'impression de l'objet ; le retour doit être une chaîne
8. __call() : Appelé automatiquement lors de l'appel d'une méthode non définie ou non publiée dans une classe. Transmettez le nom de la fonction appelée et le tableau de la liste des paramètres ;
9. __clone() : automatiquement appelé lors du clonage d'un objet à l'aide du mot-clé clone. La fonction consiste à initialiser et à attribuer des valeurs à l'objet nouvellement cloné ;
10. __sleep() : automatiquement appelé lorsque l'objet est sérialisé. Renvoie un tableau, et les valeurs du tableau sont des attributs qui peuvent être sérialisés ;
11 __wakeup() : automatiquement appelé lorsque l'objet est désérialisé. Pour désérialiser l'objet nouvellement généré, effectuez une affectation d'initialisation ;
12. __autoload() : La fonction doit être déclarée en dehors de la classe. Appelé automatiquement lorsqu'une classe non déclarée est instanciée. En transmettant le nom de classe instancié, le fichier de classe correspondant peut être automatiquement chargé en utilisant le nom de classe.

6. Classes abstraites et méthodes abstraites
六、抽象类和抽象方法

1. Qu'est-ce qu'une méthode abstraite ?
Les méthodes sans corps de méthode {} doivent être modifiées avec le mot-clé abstract. De telles méthodes sont appelées méthodes abstraites.
fonction abstraite say(); //Méthode abstraite

2.
Une classe modifiée avec le mot-clé abstract est une classe abstraite.
classe abstraite Personne{}

3. Notes sur les classes abstraites :
① Les classes abstraites peuvent contenir des éléments non abstraits. classes Méthode ;
② La classe contenant la méthode abstraite doit être une classe abstraite, et la classe abstraite ne doit pas nécessairement contenir une méthode abstraite
③ La classe abstraite ne peut pas être ; instancié. (Les classes abstraites peuvent contenir des méthodes abstraites. Les méthodes abstraites n'ont pas de corps de méthode et les appels d'instanciation n'ont aucun sens)
Le but de l'utilisation de classes abstraites est de limiter l'instanciation ! ! !

4. Si une sous-classe hérite d'une classe abstraite, alors la sous-classe doit remplacer toutes les méthodes abstraites de la classe parent, sauf si la sous-classe est également une classe abstraite.

5. Quel est le rôle de l'utilisation de classes abstraites ?
① Limiter l'instanciation. (Une classe abstraite est une classe incomplète. La méthode abstraite à l'intérieur n'a pas de corps de méthode, elle ne peut donc pas être instanciée)
② La classe abstraite fournit une spécification pour l'héritage des sous-classes, et les sous-classes héritent d'une abstraction La classe doit contenir et implémenter les méthodes abstraites définies dans la classe abstraite.

7. Interfaces et polymorphisme
七、接口与多态

1.Interface
1. Qu'est-ce qu'une interface ?
Une interface est une spécification qui fournit un ensemble de combinaisons de méthodes qui doivent être implémentées par une classe qui implémente l'interface.
L'interface est déclarée à l'aide du mot-clé interface ;
interface Inter{}

2. Doit Ce sont toutes des méthodes abstraites.
Les méthodes abstraites dans les interfaces n'ont pas besoin et ne peuvent pas être modifiées avec abstract.

3. Les variables ne peuvent pas être déclarées dans l'interface, et il ne peut pas y avoir d'attributs. Seules les constantes peuvent être utilisées ! ! !

4. Les interfaces peuvent hériter des interfaces, en utilisant le mot-clé extends ! L'interface
utilise l'interface extends pour implémenter l'héritage multiple.
interface int1 étend Inter,Inter2{}

5. Les classes peuvent implémenter des interfaces, en utilisant le mot-clé Implements !
La classe utilise des implémentations pour implémenter l'interface, qui peut implémenter plusieurs interfaces en même temps. Plusieurs interfaces sont séparées par des virgules
classe abstraite Person implémente Inter, Inter2{}
Une classe implémente une ou plusieurs interfaces, alors cette classe doit implémenter toutes les méthodes abstraites dans toutes les interfaces !
À moins que cette classe soit une classe abstraite.

※[Différence entre l'interface et la classe abstraite]
1 En termes de méthode de déclaration, les interfaces utilisent le mot-clé interface et les classes abstraites utilisent la classe abstraite.
2. En termes d'implémentation/d'héritage, une classe utilise extends pour hériter d'une classe abstraite et implémente pour implémenter l'interface.
3. Les classes abstraites ne peuvent être héritées qu'individuellement, tandis que les interfaces peuvent être implémentées de plusieurs manières. (L'interface étend l'interface), implémentations multiples (la classe implémente l'interface)
4. Les classes abstraites peuvent avoir des méthodes non abstraites, et les interfaces ne peuvent avoir que des méthodes abstraites, pas des méthodes abstraites.
Les méthodes abstraites dans les classes abstraites doivent être modifiées avec le mot-clé abstract, et les méthodes abstraites dans les interfaces ne peuvent pas être modifiées avec des modificateurs.
5. Une classe abstraite est une classe qui peut avoir des attributs et des variables ; une interface ne peut avoir que des constantes.

2. Polymorphisme
1. Une classe est héritée par plusieurs sous-classes.
Si une méthode de cette classe affiche différentes fonctions dans plusieurs sous-classes, nous appelons cela polymorphisme de comportement.

2. Moyens nécessaires pour obtenir le polymorphisme :
① La sous-classe hérite de la classe parent
② La sous-classe réécrit la classe ; méthode de classe parent ;
③ La référence de la classe parent pointe vers l'objet de sous-classe


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