1. Qu'est-ce que la POO ?
Programmation Procédurale vs POO
Procédurale (classique)
Code organisé en fonctions et variables globales.
<?php
$nom = "Jean";
$age = 25;
function afficherUtilisateur() {
global $nom,
$age; echo
"$nom, $age ans"; }
?>
POO (Orientée Objet)
Code organisé en classes et objets.
<?php
class Utilisateur { public
$nom; public
$age;
public function afficher() { echo
"$this->nom, $this->age ans"; } }
?>
Avantages de la POO :
- Code mieux organisé et réutilisable
- Données et fonctions regroupées logiquement
- Facilite la maintenance et l'évolution
- Standard de l'industrie (frameworks, CMS...)
2. Classes et Objets
Créer une classe
<?php
class Utilisateur {
public $nom;
public $prenom;
public $email;
public function afficherNomComplet() {
return $this->prenom .
" " . $this->nom; }
public function envoyerEmail($message) { return "Email envoyé à " .
$this->email . ": " .
$message; } }
?>
Créer des objets (instances)
<?php
$user1 = new Utilisateur();
$user1->nom = "Dupont";
$user1->prenom = "Jean";
$user1->email =
"jean.dupont@example.com";
echo $user1->afficherNomComplet();
echo
$user1->envoyerEmail("Bonjour !");
$user2 = new Utilisateur();
$user2->nom = "Martin";
$user2->prenom = "Marie";
$user2->email =
"marie.martin@example.com";
echo $user2->afficherNomComplet();
?>
Résultat :
Jean Dupont
Email envoyé à jean.dupont@example.com: Bonjour !
Marie Martin
Vocabulaire POO :
- Classe : Modèle / Plan (comme un plan de maison)
-
Objet : Instance de la classe (une maison construite selon le plan)
- Propriété : Variable d'un objet (nom, email...)
- Méthode : Fonction d'un objet (afficher(), envoyer()...)
3. Le constructeur __construct()
Initialiser un objet automatiquement
<?php
class Utilisateur { public
$nom; public
$prenom; public
$email;
public function __construct($nom,
$prenom, $email) {
$this->nom = $nom;
$this->prenom = $prenom;
$this->email = $email;
echo "Nouvel utilisateur créé : $prenom $nom<br>"; }
public function afficherInfo() {
return "$this->prenom $this->nom ($this->email)"; } }
$user1 = new Utilisateur("Dupont", "Jean", "jean@example.com");
$user2 = new Utilisateur("Martin", "Marie", "marie@example.com");
echo $user1->afficherInfo();
echo "<br>";
echo $user2->afficherInfo();
?>
Résultat :
Nouvel utilisateur créé : Jean Dupont
Nouvel utilisateur créé : Marie Martin
Jean Dupont (jean@example.com)
Marie Martin (marie@example.com)
Constructeur avec valeurs par défaut
<?php
class Utilisateur { public
$nom; public
$prenom; public
$role;
public function __construct($nom,
$prenom, $role =
"utilisateur") { $this->nom =
$nom; $this->prenom =
$prenom; $this->role =
$role; } }
$user1 = new Utilisateur("Dupont", "Jean");
$user2 = new Utilisateur("Admin", "Super", "admin");
echo $user1->role;
echo
$user2->role;
?>
4. $this : Référence à l'objet courant
Comprendre $this
<?php
class Compteur { public
$valeur = 0;
public function incrementer() {
$this->valeur++; return
$this->valeur; }
public function decrementer() {
$this->valeur--; return
$this->valeur; }
public function afficher() { echo
"Valeur actuelle : $this->valeur<br>"; } }
$compteur1 = new Compteur();
$compteur2 = new Compteur();
$compteur1->incrementer();
$compteur1->incrementer();
$compteur1->incrementer();
$compteur2->incrementer();
$compteur1->afficher();
$compteur2->afficher();
?>
$this permet d'accéder aux propriétés et méthodes de l'objet depuis l'intérieur
de la classe. C'est comme dire "moi-même".
5. Exemple complet : Classe Utilisateur
Application pratique
<?php
class Utilisateur {
public $id;
public $nom;
public $prenom;
public $email;
public $dateInscription;
public function __construct($id,
$nom, $prenom,
$email) { $this->id =
$id; $this->nom =
$nom; $this->prenom =
$prenom; $this->email =
$email; $this->dateInscription =
date("Y-m-d H:i:s"); }
public function getNomComplet() {
return $this->prenom .
" " . $this->nom; }
public function getInitiales() {
return strtoupper($this->prenom[0] . $this->nom[0]); }
public function envoyerEmail($sujet,
$message) { return
"Email envoyé à " . $this->email .
"\n" . "Sujet : $sujet\n" .
"Message : $message"; }
public function afficherProfil() {
echo "<div class='profil'>";
echo " <h3>$this->prenom $this->nom</h3>";
echo " <p>Email : " .
htmlspecialchars($this->email) .
"</p>"; echo
" <p>Initiales : " .
$this->getInitiales() . "</p>";
echo " <p>Inscrit le : " .
$this->dateInscription . "</p>";
echo "</div>"; } }
$user1 = new Utilisateur(1,
"Dupont", "Jean",
"jean.dupont@example.com"); $user2 =
new Utilisateur(2, "Martin",
"Marie", "marie.martin@example.com");
echo $user1->getNomComplet() .
"<br>"; echo
$user1->getInitiales() . "<br>";
$user1->afficherProfil();
$user2->afficherProfil();
echo $user1->envoyerEmail("Bienvenue", "Merci de vous être inscrit !");
?>
6. Instanciation et manipulation d'objets
Créer et utiliser plusieurs objets
<?php
$utilisateurs = [];
$utilisateurs[] = new Utilisateur(1,
"Dupont", "Jean",
"jean@example.com"); $utilisateurs[] =
new Utilisateur(2, "Martin",
"Marie", "marie@example.com");
$utilisateurs[] = new Utilisateur(3,
"Durand", "Paul",
"paul@example.com");
foreach ($utilisateurs
as $user) {
$user->afficherProfil(); }
echo "Total : " .
count($utilisateurs) .
" utilisateurs";
?>
Vérifier le type d'un objet
<?php
$user = new Utilisateur(1,
"Test", "User",
"test@example.com");
var_dump(is_object($user));
var_dump($user
instanceof Utilisateur);
echo get_class($user);
print_r(get_object_vars($user));
print_r(get_class_methods('Utilisateur'));
?>
7. Bonnes pratiques POO
Nommage
- Classes : PascalCase (Utilisateur, ArticleManager)
- Méthodes : camelCase (getNom, envoyerEmail)
- Propriétés : camelCase ($nom, $dateCreation)
- Un fichier = Une classe
Organisation
- Propriétés en haut de la classe
- Constructeur juste après
- Méthodes publiques
- Méthodes privées en dernier
Responsabilités
- Une classe = une responsabilité claire
- Méthodes courtes et focalisées
- Éviter les dépendances complexes
- Privilégier la réutilisation
Sécurité
- Valider les données dans le constructeur
- htmlspecialchars() à l'affichage
- Ne pas exposer de données sensibles
- Filtrer les entrées utilisateur
Froggiesplaining :
Objectifs de ce cours :
✅ Comprendre la différence entre classe et objet
✅ Créer des classes avec propriétés et méthodes
✅ Utiliser le constructeur __construct()
✅ Maîtriser $this pour accéder aux propriétés
✅ Instancier plusieurs objets indépendants
Points clés à retenir :
• Classe = Le plan/modèle (comme un plan génétique des grenouilles)
• Objet = Une instance réelle de la classe (une grenouille particulière)
• Propriétés = Les caractéristiques (nom, couleur, âge)
• Méthodes = Les actions possibles (sauter(), coasser(), nager())
• $this = Référence à l'objet courant ("moi-même")
• Constructeur = Méthode appelée automatiquement à la création (new)
• La POO permet d'organiser le code de manière réutilisable et maintenable
Exercice pratique :
1. Créer une classe Grenouille avec propriétés: nom, couleur, âge
2. Ajouter un constructeur pour initialiser ces propriétés
3. Créer une méthode coasser() qui affiche "Ribbit !"
4. Instancier 3 grenouilles différentes avec des caractéristiques variées
5. Faire coasser chaque grenouille et afficher leurs infos
6. Conseil de Froggie: La POO c'est comme un moule à gaufres (classe) qui crée plein de gaufres
différentes (objets) avec des garnitures variées (propriétés) !