Introduction à la programmation orienté objet et class en PHP

POO signifie programmation orientée objet en anglais OOP (Object-Oriented Programming). La programmation procédurale consiste à écrire des procédures ou des fonctions qui effectuent des opérations sur les données, tandis que la programmation orientée objet consiste à créer des objets qui contiennent à la fois des données et des fonctions.

La programmation orientée objet présente plusieurs avantages par rapport à la programmation procédurale: la POO est plus rapide et plus facile à exécuter. La POO fournit une structure claire pour les programmes. modifier et déboguer la POO permet de créer des applications entièrement réutilisables avec moins de code et un temps de développement plus court.

Astuce : Le principe « Don’t Repeat Yourself » (DRY) consiste à réduire la répétition du code. Vous devez extraire les codes communs à l’application, les placer à un seul endroit et les réutiliser au lieu de les répéter.

Quels sont les avantages

  • Réutilisations des classes dans d’autres projets et aussi peu importe le languages, il y a juste le format d’écriture qui change, mais qui se réécrit très rapidement
  • Facile d’utilisations avec les design patterns
  • Un code organisé et clair, on peut créer une infinitée d’objets, on peut facilement mettre à jour ses classes PHP

Mise en pratique

Crééons ensemble une classe voiture. Une voiture peut avoir des propriétés telles que le nom, la couleur, et la puissance ( en chevaux ). Nous pouvons définir des variables comme $nom, $couleu ret $puissance pour contenir les valeurs de ces propriétés. On peut alors créer des objets , soit des marques de voitures (ferrari, audi,bmw, porsche, etc.) Ils héritent de toutes les propriétés et comportements de la classe, mais chaque objet aura des valeurs différentes pour les propriétés.

Définition d’une classe

Une classe est définie à l’aide du mot-clé Class, suivi du nom de la classe et d’une paire d’accolades ({}). Toutes ses propriétés et méthodes vont à l’intérieur des accolades:

<?php
class Voiture{
  // TOUT mon code
}
?>

Ci-dessous, nous déclarons une classe nommée VOiture composée de 3 propriétés ($nom et $couleur et $puissance) et de deux méthodes set_nom() et get_nom() pour définir et obtenir la propriété $nom:

Pour indication get = obtenir / set = placer / attribuer

Voici ma classe Voiture écrite en PHP :

<?php
class Voiture{
  // Propriétés
  public $nom;
  public $couleur;
  public $puissance;

  // Methods
  function set_nom($nom) {
    $this->nom = $nom;
  }

  function get_nom() {
    return $this->nom;
  }
}
?>

Définir des objets

Les classes ne sont rien sans objets! Nous pouvons créer plusieurs objets à partir d’une classe. Chaque objet possède toutes les propriétés et méthodes définies dans la classe, mais elles auront des valeurs de propriété différentes. Les objets d’une classe sont créés à l’aide du nouveau mot-clé. Dans l’exemple ci-dessous, $ferrari et $porsche sont des instances de la classe Voiture:

<?php

class Personnage
{
  // Les Propriétés, ici nous avons 3 propriétés, nous pouvons ajouter une infinité de propriétés
  public $nom;
  public $level;
  public $vie;

  // Les Methodes
  public function getNiveau(): string {
    return $this->level;
  }

  public function setNiveau(int $level) {
    $this->level = $level;
    return $this;
  }

  public function getNom(): string {
    return $this->nom;
  }

  public function setNom(string $nom) {
    $this->nom = $nom;
    return $this;
  }

  public function getVie(): string {
    return $this->vie;
  }

  function setVie($vie) {
    $this->vie = $vie;
  }

  // Mes fonctions
  public function Attaque() {
      // Formule de dégats attaque = level * 10
      $degats = $this->getNiveau() * 10;

      echo 'Attaque : ' . $degats . ' de dommages ';
    }
    
  public function SupperAttaque(){
      return $attaque = $this->getLevel() * 10;
    }
}

$demon = new Personnage();

$demon->setNom('Luffy'); // je lui attribu un nom à mon personnage
$demon->setNiveau(10);  // Il sera niveau 10
$demon->setVie(100);  // Il aura une base de 100 points de vie 

echo 'Points de vie : '.$demon->getVie();
echo '<br />';
$demon->Attaque(); // je lance mon attaque

?>

Voici ce que ça donne, le résultat :