Backend • Niveau Débutant (12 ans & +)
Temps de lecture : 7 minutes • +20 XP Concepteur

PHP & POO : La Forge de Sabres et le Facteur Impérial Unique

Découvre les classes, les objets, le Singleton et les sessions comme si tu étais au château du Shogun !

Chapitre 1

La Classe et l'Objet : L'Atelier de Forge

Imagine que tu es le maître forgeron du Shogun. Avant de frapper l'acier incandescent, tu dessines un plan d'architecte très précis sur un rouleau de parchemin.

Ce plan décrit tout : la longueur de la lame, le matériau de la garde, et la technique pour trancher le bambou. Mais attention ! Tu ne peux pas te battre avec une feuille de papier : ce n'est qu'une définition.

La Classe (Le Plan ou le Moule)
C'est le moule à gâteau ou le plan du forgeron. Il n'existe qu'une seule fois dans ton code. Il définit ce que les objets sauront faire.
L'Objet (Le Vrai Sabre Forgé)
C'est le gâteau qui sort du four ou le vrai katana en acier ! Avec un seul moule, tu peux créer 100 sabres différents avec chacun leur nom et leur propriétaire.

En PHP, quand on écrit new Katana(), c'est comme crier : « Maître forgeron, utilise le plan Katana pour me fabriquer un nouvel exemplaire tout neuf ! ». Cette action s'appelle instancier un objet.

Parchemin PHP Katana.php
class Katana {
  // 1. Les Propriétés (ce qu'il possède)
  public $nom;
  public $tranchant = 100;

  // 2. Les Méthodes (ce qu'il sait faire)
  public function attaquer() {
    return "ZLAN ! Dégâts infligés !";
  }
}

// On forge 2 sabres distincts :
$sabreOda = new Katana();
$sabreOda->nom = "ÉclairPourpre";

$sabreTakeda = new Katana();
$sabreTakeda->nom = "VentDuNord";
Le savais-tu ? La petite flèche magique ->
En PHP, quand tu vois $monPersonnage->courir(), la flèche -> signifie : « Hé, prends cet objet précis, et demande-lui d'exécuter son action ! ». C'est l'équivalent de dire à ton chien : « Médor->donneLaPatte() » !
Chapitre 2

Le Design Pattern « Singleton » : Le Facteur Impérial Unique

Le problème de la pagaille au château

Dans OpenShogun, nous avons un service qui envoie des e-mails ou des notifications : MailService.

Imagine si chaque fois qu'un samouraï, un tavernier ou le cuisinier voulait envoyer une missive, on devait :

  • Construire un nouveau bureau de poste en bois dans la cour...
  • Acheter une nouvelle écurie et 10 nouveaux chevaux...
  • Embaucher un nouveau facteur en chef...

Ce serait un gâchis gigantesque d'énergie et de mémoire pour notre serveur !

La Règle du Singleton

Le Singleton est une règle de programmation qui dit : « Pour ce service spécial, il n'existera JAMAIS qu'un seul et unique exemplaire dans tout le royaume informatique ! ».

// Au lieu de faire new MailService() :
$facteur = MailService::getInstance();
$facteur->envoyerMissive("Ennemi repéré !");
Si le facteur existe déjà, getInstance() te le prête aussitôt. S'il n'existe pas encore, il le crée une bonne fois pour toutes !
Le saviez-tu ? Pourquoi le mot bizarre « Singleton » ?
En anglais, un « single » est quelque chose d'unique ou de célibataire. En informatique, le Singleton fait partie de ce qu'on appelle les Design Patterns (des recettes de cuisine géniales inventées par les pionniers de l'informatique pour résoudre des problèmes classiques).
Chapitre 3

Les Sessions ($_SESSION) : Le Sceau de Cire sur la Main

As-tu remarqué que quand tu te connectes à OpenShogun avec ton mot de passe, tu n'as pas besoin de le retaper à chaque fois que tu cliques sur la Caserne, la Carte ou le Sénat ?

Pourtant, le protocole du Web (HTTP) a la mémoire d'un poisson rouge : dès qu'une page est affichée, il oublie complètement qui tu es !

L'Astuce du Garde du Château :
Lorsque tu prouves ton identité à la grande porte (connexion réussie), le garde tamponne sur le dos de ta main un sceau de cire impérial avec un numéro secret (appelé le PHPSESSID).

Quand tu te déplaces dans le château, les sentinelles regardent juste ton tampon : « Ah oui, c'est bien le Daimyo de la session n° 84920 ! Bienvenue dans votre armurerie monseigneur ! ».

Dans le code PHP du serveur :

// 1. Le joueur s'est connecté
$_SESSION['user_id'] = 42;
$_SESSION['pseudo'] = "Musashi";
$_SESSION['is_admin'] = true;
Sur toutes les autres pages, PHP vérifie simplement Auth::check() en regardant si le tiroir de session existe toujours !

Le Défi de Gabriel : Teste tes Connaissances !

2 Questions

Réponds aux deux questions ci-dessous pour prouver que tu as bien assimilé la magie de la POO et du Singleton !

Question 1 Si une Classe est le plan d'architecte d'un château féodal, qu'est-ce qu'un Objet ?

Question 2 Pourquoi le MailService utilise-t-il le patron de conception Singleton ?