Tutoriel PHP

ACCUEIL PHP Introduction PHP Installation PHP Syntaxe PHP Commentaires PHP Variables PHP Écho PHP / Impression Types de données PHP Chaînes PHP Numéros PHP Mathématiques PHP Constantes PHP Opérateurs PHP PHP Si... Sinon... Sinon Commutateur PHP Boucles PHP Fonctions PHP Tableaux PHP Superglobales PHP Expression régulière PHP

Formulaires PHP

Gestion des formulaires PHP Validation de formulaire PHP Formulaire PHP requis URL/courriel du formulaire PHP Formulaire PHP terminé

PHP Avancé

Date et heure PHP Inclure PHP Gestion des fichiers PHP Fichier PHP Ouvrir/Lire Création/écriture de fichier PHP Téléchargement de fichier PHP Cookies PHP Séances PHP Filtres PHP Filtres PHP avancés Fonctions de rappel PHP PHPJSON Exception PHP

POO PHP

PHP Qu'est-ce que la POO Classes/Objets PHP Constructeur PHP Destructeur PHP Modificateurs d'accès PHP Héritage PHP Constantes PHP Classes abstraites PHP Interface PHP Caractéristiques PHP Méthodes statiques PHP Propriétés statiques PHP Espaces de noms PHP Itérables PHP

Base de données MySQL

Base de données MySQL Connexion MySQL Créer une base de données MySQL Créer une table MySQL MySQL Insérer des données MySQL obtenir le dernier ID MySQL Insérer plusieurs MySQL préparé MySQL Sélectionner les données MySQL Où Trier MySQL par MySQL Supprimer les données Données de mise à jour MySQL Données de limite MySQL

XML PHP

Analyseurs PHP XML Analyseur PHP SimpleXML PHP SimpleXML - Obtenir Expatriation PHP XML PHP XML DOM

PHP -AJAX

Introduction à AJAX PHP AJAX Base de données AJAX XML AJAX Recherche en direct AJAX Sondage AJAX

Exemples PHP

Exemples PHP Compilateur PHP Questionnaire PHP Exercices PHP Certificat PHP

Référence PHP

Présentation de PHP Tableau PHP Calendrier PHP Date PHP Annuaire PHP Erreur PHP Exception PHP Système de fichiers PHP Filtre PHP FTP PHP PHPJSON Mots clés PHP PHP LibxmlComment Messagerie PHP Mathématiques PHP Divers PHP PHP MySQL Réseau PHP Contrôle de sortie PHP Expression régulière PHP PHP SimpleXML Flux PHP Chaîne PHP Gestion des variables PHP Analyseur PHP XML Code postal PHP Fuseaux horaires PHP

PHP OOP - Classes abstraites


PHP - Que sont les classes abstraites et les méthodes ?

Les classes et méthodes abstraites sont lorsque la classe parent a une méthode nommée, mais a besoin de sa ou ses classes enfant pour remplir les tâches.

Une classe abstraite est une classe qui contient au moins une méthode abstraite. Une méthode abstraite est une méthode déclarée mais non implémentée dans le code.

Une classe ou une méthode abstraite est définie avec le mot- abstract clé :

Syntaxe

<?php
abstract class ParentClass {
  abstract public function someMethod1();
  abstract public function someMethod2($name, $color);
  abstract public function someMethod3() : string;
}
?>

Lors de l'héritage d'une classe abstraite, la méthode de la classe enfant doit être définie avec le même nom et le même modificateur d'accès ou un modificateur d'accès moins restreint. Ainsi, si la méthode abstraite est définie comme protégée, la méthode de la classe enfant doit être définie comme protégée ou publique, mais pas privée. De plus, le type et le nombre d'arguments requis doivent être identiques. Cependant, les classes enfants peuvent avoir en plus des arguments facultatifs.

Ainsi, lorsqu'une classe enfant est héritée d'une classe abstraite, nous avons les règles suivantes :

  • La méthode de classe enfant doit être définie avec le même nom et elle redéclare la méthode abstraite parent
  • La méthode de la classe enfant doit être définie avec le même modificateur d'accès ou un modificateur d'accès moins restreint
  • Le nombre d'arguments requis doit être le même. Cependant, la classe enfant peut avoir des arguments optionnels en plus

Regardons un exemple :

Exemple

<?php
// Parent class
abstract class Car {
  public $name;
  public function __construct($name) {
    $this->name = $name;
  }
  abstract public function intro() : string;
}

// Child classes
class Audi extends Car {
  public function intro() : string {
    return "Choose German quality! I'm an $this->name!";
  }
}

class Volvo extends Car {
  public function intro() : string {
    return "Proud to be Swedish! I'm a $this->name!";
  }
}

class Citroen extends Car {
  public function intro() : string {
    return "French extravagance! I'm a $this->name!";
  }
}

// Create objects from the child classes
$audi = new audi("Audi");
echo $audi->intro();
echo "<br>";

$volvo = new volvo("Volvo");
echo $volvo->intro();
echo "<br>";

$citroen = new citroen("Citroen");
echo $citroen->intro();
?>

Exemple expliqué

Les classes Audi, Volvo et Citroën sont héritées de la classe Car. Cela signifie que les classes Audi, Volvo et Citroën peuvent utiliser la propriété publique $name ainsi que la méthode publique __construct() de la classe Car en raison de l'héritage.

Mais, intro() est une méthode abstraite qui doit être définie dans toutes les classes enfants et elles doivent renvoyer une chaîne.



PHP - Plus d'exemples de classes abstraites

Regardons un autre exemple où la méthode abstraite a un argument :

Exemple

<?php
abstract class ParentClass {
  // Abstract method with an argument
  abstract protected function prefixName($name);
}

class ChildClass extends ParentClass {
  public function prefixName($name) {
    if ($name == "John Doe") {
      $prefix = "Mr.";
    } elseif ($name == "Jane Doe") {
      $prefix = "Mrs.";
    } else {
      $prefix = "";
    }
    return "{$prefix} {$name}";
  }
}

$class = new ChildClass;
echo $class->prefixName("John Doe");
echo "<br>";
echo $class->prefixName("Jane Doe");
?>

Regardons un autre exemple où la méthode abstraite a un argument, et la classe enfant a deux arguments facultatifs qui ne sont pas définis dans la méthode abstraite du parent :

Exemple

<?php
abstract class ParentClass {
  // Abstract method with an argument
  abstract protected function prefixName($name);
}

class ChildClass extends ParentClass {
  // The child class may define optional arguments that are not in the parent's abstract method
  public function prefixName($name, $separator = ".", $greet = "Dear") {
    if ($name == "John Doe") {
      $prefix = "Mr";
    } elseif ($name == "Jane Doe") {
      $prefix = "Mrs";
    } else {
      $prefix = "";
    }
    return "{$greet} {$prefix}{$separator} {$name}";
  }
}

$class = new ChildClass;
echo $class->prefixName("John Doe");
echo "<br>";
echo $class->prefixName("Jane Doe");
?>