Concept de programmation orientée objet (POO) en PHP avec exemple

⚡ Résumé intelligent

La programmation orientée objet en PHP modélise une application autour d'objets du monde réel à l'aide de classes et d'objets. Ce guide explique les principes de la POO (encapsulation, héritage et polymorphisme), leur prise en charge par PHP, et propose des exemples fonctionnels de classes, d'héritage et d'interfaces, étape par étape.

  • 🧱 Classes et objets : Une classe définit les propriétés et les méthodes d'un élément du monde réel, et un objet est une instance unique de cette classe.
  • (I.e. Encapsulation: Les variables privées dotées de méthodes publiques get et set masquent les détails internes et protègent l'état d'un objet.
  • 👪 héritage: Le mot-clé extends permet à une classe enfant de réutiliser les méthodes d'une classe parente, réduisant ainsi le code dupliqué.
  • (I.e. Polymorphisme: Une interface définit des méthodes standard que de nombreuses classes implémentent différemment derrière une interface uniforme.tract.
  • (I.e. Diagramme de classes UML : Un diagramme de classes montre le nom de la classe, les variables et les méthodes, avec les symboles plus, moins et dièse indiquant la portée publique, privée et protégée.
  • 🧩 Interfaces et Abstract: Un abdostracUne classe T partage du code commun, tandis qu'une interface garantit que chaque classe pilote fournit les mêmes méthodes.
  • 🤖 Assistance IA : Les outils d'IA peuvent générer une classe PHP à partir d'une description et restructurer le code procédural en un code orienté objet propre.

Programmation orientée objet PHP

Qu’est-ce que les POO ?

La programmation orientée objet est une approche du développement logiciel qui modélise une application à partir d'objets du monde réel, tels que des employés, des voitures et des comptes bancaires. Une classe définit les propriétés et les méthodes d'un objet du monde réel. Un objet est une instance d'une classe.

Les trois composantes fondamentales de l'orientation objet sont :

  • Analyse orientée objet – fonctionnalité du système
  • Conception orientée objet – architecture du système
  • Programmation orientée objet – mise en œuvre de l'application

Principes de programmation orientée objet

Les trois grands principes de la POO sont :

  • Encapsulation – Il s’agit de masquer les détails d’implémentation et de n’exposer que les méthodes. Les principaux objectifs de l’encapsulation sont les suivants :
    • Réduisez la complexité du développement logiciel – en masquant les détails d’implémentation et en exposant uniquement les opérations, l’utilisation d’une classe devient facile.
    • Protégez l'état interne d'un objet : l'accès aux variables de classe se fait via des méthodes telles que get et set. Cela rend la classe flexible et facile à maintenir.
    • Autoriser la modification de l'implémentation interne de la classe sans craindre de casser le code qui utilise cette classe.
  • Droit des successions – Ceci concerne la relation entre les classes. Cette relation prend la forme d'une relation parent-enfant. L'enfant utilise les méthodes définies dans la classe parent. L'objectif principal de l'héritage est :
    • Réutilisabilité – plusieurs classes enfants peuvent hériter d'une même classe parente. Ceci est très utile lorsqu'il faut fournir des fonctionnalités communes telles que l'ajout, la mise à jour et la suppression de données dans la base de données.
  • Polymorphisme – Il s’agit d’avoir une interface unique avec de nombreuses implémentations différentes. Le but principal du polymorphisme est :
    • Pour simplifier la maintenance des applications et les rendre plus extensibles.

Oops Concepts en PHP

PHP est un langage de script orienté objet ; il prend en charge tous les principes ci-dessus. Ces principes sont mis en œuvre grâce à :

  • Encapsulation – via l’utilisation des méthodes « get » et « set », et des modificateurs d’accès.
  • Droit des successions – via l'utilisation du mot-clé extends
  • Polymorphisme – via l'utilisation du mot-clé implements

Maintenant que nous avons les connaissances de base de la POO et de la façon dont elle est prise en charge dans PHPExaminons maintenant des exemples qui mettent en œuvre les principes ci-dessus.

Qu'est-ce qu'UML ?

Le langage de modélisation unifié (UML) est une technique utilisée pour concevoir et documenter les systèmes orientés objet.

UML produit de nombreux documents, mais nous allons nous intéresser au diagramme de classes, qui est très important pour la programmation PHP orientée objet.

Exemple de diagramme de classes

Oops Concepts en PHP

Clé du diagramme de classes

  • Le boîte supérieure contient le nom de la classe
  • Le boîte du milieu contient les variables de classe
  • Le boîte inférieure contient les méthodes de classe
  • Le moins (-) signe signifie portée privée
  • Le plus (+) signe signifie portée publique
  • Le hachage (#) signe signifie portée protégée

Comment créer une classe en PHP

Le mot-clé class est utilisé pour définir une classe en PHP. Vous trouverez ci-dessous les règles de création d'une classe en PHP.

  • Le nom de la classe doit commencer par une lettre
  • Le nom de la classe ne peut pas être un mot réservé PHP
  • Le nom de la classe ne peut pas contenir d'espaces

Supposons que nous voulions créer une classe pour représenter les animaux. Nous commencerons par identifier les caractéristiques communes à tous les animaux.

  • Tous les animaux appartiennent à une famille, comme les herbivores, les carnivores, etc.
  • Tous les animaux mangent de la nourriture

Le diagramme ci-dessous représente le diagramme de classes de l'animal.

Créer une classe en PHP

Passons maintenant au codage de notre classe Animal.

<?php
class Animal
{
    private $family;
    private $food;
    public function __construct($family, $food)
    {
        $this->family = $family;
        $this->food = $food;
    }
    public function get_family()
    {
        return $this->family;
    }
    public function set_family($family)
    {
        $this->family = $family;
    }
    public function get_food()
    {
        return $this->food;
    }
    public function set_food($food)
    {
        $this->food = $food;
    }
}
?>

ICI,

  • « private $family, $food » signifie que les variables ne sont pas accessibles directement en dehors de la classe (encapsulation).
  • La fonction `public function __construct($family…)` est la méthode constructeur de PHP. Elle est appelée à chaque création d'une instance de la classe. Dans ce cas, nous définissons la famille et la nourriture.
  • « public function get…() » est la méthode utilisée pour accéder à la valeur de la famille ou de l'aliment (encapsulation).
  • « public function set…() » est la méthode utilisée pour définir la valeur de la famille ou de l'aliment (encapsulation).

Comment implémenter l'héritage en PHP

Nous travaillerons avec une vache et un lion. La vache et le lion héritent de la classe Animal.

Le diagramme de classes ci-dessous montre les relations.

implémenter l'héritage en PHP

Notez que la vache hérite de la classe Animal et définit également ses propres variables et méthodes.

Passons maintenant au codage de la classe Cow.

<?php
class Cow extends Animal
{
    private $owner;
    public function __construct($family, $food)
    {
        parent::__construct($family, $food);
    }
    public function set_owner($owner)
    {
        $this->owner = $owner;
    }
    public function get_owner()
    {
        return $this->owner;
    }
}
?>

Passons maintenant au codage de la classe Lion.

<?php
class Lion extends Animal
{
    public function __construct($family, $food)
    {
        parent::__construct($family, $food);
    }
}
?>

ICI,

  • « class … extends Animal » fait en sorte que les classes Cow et Lion utilisent les méthodes de la classe Animal (héritage).

Comment créer un objet de la classe

Les classes Animal, Cow et Lion doivent toutes se trouver dans le même répertoire par souci de simplicité.

Créons maintenant l'application qui utilise nos classes.

Exemple de classe PHP

<?php
require 'Animal.php';
require 'Cow.php';
require 'Lion.php';
$cow = new Cow('Herbivore', 'Grass');
$lion = new Lion('Carnivore', 'Meat');
echo '<b>Cow Object</b> <br>';
echo 'The Cow belongs to the ' . $cow->get_family() . ' family and eats ' . $cow->get_food() . '<br><br>';
echo '<b>Lion Object</b> <br>';
echo 'The Lion belongs to the ' . $lion->get_family() . ' family and eats ' . $lion->get_food();
?>

Tester notre application

Voyons maintenant notre application dans un navigateur web.

Héritage en PHP

Les deux objets réutilisent les méthodes get_family et get_food héritées de la classe Animal, ce qui illustre le principe d'héritage en action.

Comment implémenter le polymorphisme en PHP

Supposons que nous souhaitions développer une application qui se connecte à différents moteurs de bases de données tels que : MySQL et SQL Le serveur utilise la même interface uniforme. Nous pouvons créer une interface qui définit les méthodes standard et une valeur absolue.tracclasse t qui implémente les méthodes communes.

  • Interface – c’est semblable à une classe. Il définit uniquement les méthodes et les paramètres.
  • Abdostracclasse T – c’est une classe qui ne peut pas être utilisée pour créer directement un objet. Son objectif est de fournir des implémentations partielles ou totales de méthodes courantes.

Le diagramme de classes ci-dessous illustre la relation entre nos abstracclasses t, interfaces et classes d'implémentation.

Héritage en PHP

Commençons par créer nos abdominaux.tracclasse t.

<?php
abstract class DBCommonMethods
{
    private $host;
    private $db;
    private $uid;
    private $password;
    public function __construct($host, $db, $uid, $password)
    {
        $this->host = $host;
        $this->db = $db;
        $this->uid = $uid;
        $this->password = $password;
    }
}
?>

ICI,

  • « abdos »trac« classe t » signifie que la classe ne peut pas être utilisée directement pour créer un objet
  • « $host, $db… » sont des variables de classe communes à toutes les implémentations.
  • « function __construct(…) » est la méthode constructeur de la classe qui définit les valeurs des variables communes lors de l'initialisation.

Créons maintenant l'interface qui contient les méthodes standard, dont l'implémentation variera selon le moteur de base de données.

<?php
interface DBInterface
{
    public function db_connect();
    public function insert($data);
    public function read($where);
    public function update($where);
    public function delete($where);
}
?>

ICI,

  • « interface » est le mot-clé pour créer des interfaces
  • « fonction publique…(…) » sont les méthodes standards à mettre en œuvre

Créons maintenant les classes concrètes qui étendront la classe DBCommonMethods et implémenteront l'interface DBInterface. Tout d'abord, MySQLDriver.php :

<?php
class MySQLDriver extends DBCommonMethods implements DBInterface
{
    public function __construct($host, $db, $uid, $password)
    {
        parent::__construct($host, $db, $uid, $password);
    }
    public function db_connect() { /* connect code goes here */ }
    public function delete($where) { /* delete code goes here */ }
    public function insert($data)  { /* insert code goes here */ }
    public function read($where)   { /* read code goes here */ }
    public function update($where) { /* update code goes here */ }
}
?>

Ensuite, MSSQLServerDriver.php :

<?php
class MSSQLServerDriver extends DBCommonMethods implements DBInterface
{
    public function __construct($host, $db, $uid, $password)
    {
        parent::__construct($host, $db, $uid, $password);
    }
    public function db_connect() { /* connect code goes here */ }
    public function delete($where) { /* delete code goes here */ }
    public function insert($data)  { /* insert code goes here */ }
    public function read($where)   { /* read code goes here */ }
    public function update($where) { /* update code goes here */ }
}
?>

ICI,

  • « class … extends DBCommonMethods » utilise les méthodes de DBCommonMethods
  • « … implémente DBInterface » garantit que la classe fournit les méthodes standard quel que soit le pilote de base de données utilisé.

Le code utilisant les classes ci-dessus ressemblerait à ceci :

<?php $db = new MySQLDriver($host, $db, $uid, $password); ?>

Ou:

<?php $db = new MSSQLServerDriver($host, $db, $uid, $password); ?>

Le reste du code serait identique pour les deux pilotes, par exemple :

<?php
$db->db_connect();
$db->insert($data);
?>

Voici le polymorphisme en action : les mêmes appels de méthode fonctionnent sur n’importe quel pilote qui implémente l’interface, de sorte que le code environnant ne change jamais lorsque vous changez de moteur de base de données.

FAQ

Un abdostracUne classe T peut contenir à la fois des méthodes implémentées et des propriétés, et une classe n'hérite que d'une seule interface. Une interface ne déclare que les signatures des méthodes, et une classe peut en implémenter plusieurs. Utilisez une interface absolue.tracune classe t pour partager du code, une interface pour imposer une contraintetract.

Les quatre piliers sont l'encapsulation, l'héritage, le polymorphisme et l'abstraction.traction. Ce tutoriel se concentre sur les trois premiers ; abstraction masque des détails complexes derrière une interface simple, ce que PHP prend en charge avec abstracclasses et interfaces.

Les membres publics sont accessibles partout, les membres privés uniquement au sein de la même classe, et les membres protégés uniquement au sein de la classe et de ses sous-classes. Ils garantissent l'encapsulation en contrôlant qui peut lire ou modifier chaque propriété ou méthode.

Oui. Donnez à l'IA les champs ou une définition de table, et elle pourra produire une classe avec des propriétés typées, un constructeur et des méthodes get et set. RevVérifiez les types et ajoutez une validation avant d'utiliser la classe.

Oui. Collez le script procédural, et l'IA pourra regrouper les fonctions et les données associées en classes, appliquer l'encapsulation et suggérer l'héritage ou les interfaces. Testez le code remanié : son comportement devrait rester identique.

Résumez cet article avec :