Les classes abstraites sont souvent utilisées pour représenter des concepts abstraits dérivés de l'analyse et de la conception de domaines problématiques. Ce sont des abstractions d'une série de concepts spécifiques qui semblent différents mais sont essentiellement les mêmes.
La classe abstraite est incomplète, elle ne peut être utilisée que comme classe de base. Dans l'approche orientée objet, les classes abstraites sont principalement utilisées pour masquer les types et agir comme des variables globales. (Apprentissage recommandé : Tutoriel vidéo PHP)
PHP 5 prend en charge les classes abstraites et les méthodes abstraites. Les classes définies comme abstraites ne peuvent pas être instanciées. Toute classe doit être déclarée abstraite si au moins une méthode qu'elle contient est déclarée abstraite. Une méthode définie comme abstraite déclare uniquement sa méthode appelante (paramètres) et ne peut pas définir son implémentation de fonction spécifique.
Lors de l'héritage d'une classe abstraite, la sous-classe doit définir toutes les méthodes abstraites de la classe parent ; de plus, le contrôle d'accès de ces méthodes doit être le même que celui de la classe parent (ou plus détendu).
Par exemple, si une méthode abstraite est déclarée comme protégée, alors la méthode implémentée dans la sous-classe doit être déclarée comme protégée ou publique, et ne peut pas être définie comme privée.
De plus, les méthodes d'appel de méthode doivent correspondre, c'est-à-dire que le type et le nombre de paramètres requis doivent être cohérents.
Par exemple, si la sous-classe définit un paramètre facultatif mais qu'il n'est pas inclus dans la déclaration de la méthode abstraite de la classe parent, il n'y a pas de conflit entre les deux déclarations.
Cela s'applique également aux constructeurs depuis PHP 5.4. Les déclarations des constructeurs avant PHP 5.4 pouvaient être différentes.
Exemple de classe abstraite
<?php abstract class AbstractClass { // 强制要求子类定义这些方法 abstract protected function getValue(); abstract protected function prefixValue($prefix); // 普通方法(非抽象方法) public function printOut() { print $this->getValue() . "\n"; } } class ConcreteClass1 extends AbstractClass { protected function getValue() { return "ConcreteClass1"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass1"; } } class ConcreteClass2 extends AbstractClass { public function getValue() { return "ConcreteClass2"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass2"; } } $class1 = new ConcreteClass1; $class1->printOut(); echo $class1->prefixValue('FOO_') ."\n"; $class2 = new ConcreteClass2; $class2->printOut(); echo $class2->prefixValue('FOO_') ."\n"; ?>
La routine ci-dessus affichera :
ConcreteClass1 FOO_ConcreteClass1 ConcreteClass2 FOO_ConcreteClass2
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!