PHP Orienté Objet nouveautés 8.0 à 8.5
L'orienté objet, en PHP et dans d'autres langages, est également nommé POO (programmation orientée objet).
C'est un paradigme de programmation informatique.
La POO consiste en la définition et l'interaction de briques logicielles appelées objets.
Un objet représente un concept, une idée ou toute entité du monde physique, comme une voiture, une personne ou encore une page d'un livre. Il possède une structure interne et un comportement, et il sait interagir avec ses pairs.
Il s'agit donc de représenter ces objets et leurs relations. L'interaction entre les objets via leurs relations permet de concevoir et réaliser les fonctionnalités attendues, de mieux résoudre le ou les problèmes. Dès lors, l'étape de modélisation revêt une importance majeure et nécessaire pour la POO. C'est elle qui permet de transcrire les éléments du réel sous forme virtuelle.
Prérequis
Ce cours s'adresse à des personnes qui connaissent déjà :
- le PHP procédural (variables, fonctions, tableaux, structures de contrôle) ;
- les requêtes préparées avec PDO.
Nous réutiliserons ces connaissances tout au long du cours, notamment dans les chapitres consacrés au mapping SQL et aux managers.
Les versions de PHP 8
Ce cours couvre les apports orientés objet de toutes les versions de PHP 8 :
Version | Sortie | Nouveautés objet principales |
|---|---|---|
8.0 | 2020 | Promotion de propriétés dans le constructeur, arguments nommés, match, opérateur nullsafe ?->, types union, attributs |
8.1 | 2021 | Énumérations ( enum), propriétés readonly, syntaxe de callable de première classe f(...), new dans les initialiseurs, constantes final |
8.2 | 2022 | Classes readonly, constantes dans les traits, dépréciation des propriétés dynamiques, types DNF |
8.3 | 2023 | Constantes de classe typées, attribut #[\Override], clonage profond des propriétés readonly |
8.4 | 2024 | Property hooks, visibilité asymétrique, new SansParenthèses()->methode(), objets paresseux (lazy objects) |
8.5 | 2025 | Opérateur pipe |>, final sur les propriétés promues, closures dans les expressions constantes |
Voir sur mon dépôt GitHub :
- Introduction
- 0. Du procédural à l'objet
- 1. Les classes et les objets
- 1.1. Déclaration d'une classe
- 1.2. La visibilité des propriétés et des méthodes
- 1.3. Les propriétés typées
- 1.4. Instanciation d'une classe
- 1.5. Accès aux propriétés et aux méthodes depuis l'intérieur de la classe
- 1.6. Accès depuis l'extérieur de la classe et propriétés dynamiques
- 1.7. Les constructeurs
- 1.8. La promotion de propriétés dans le constructeur (PHP 8.0)
- 1.9. Les arguments nommés (PHP 8.0)
- 1.10. Les propriétés readonly (PHP 8.1) et les classes readonly (PHP 8.2)
- 1.11. Les getters et les setters
- 1.12. Les property hooks et la visibilité asymétrique (PHP 8.4)
- 1.13. Les méthodes magiques
- 1.14. L'opérateur nullsafe (PHP 8.0)
- 1.15. Exercices
- 🎮 Exercices du chapitre 1
- 2. L'héritage
- 2.1. Le mot clé extends
- 2.2. L'héritage multiple
- 2.3. L'héritage et la visibilité
- 2.4. La redéfinition de méthodes et l'attribut #[\Override] (PHP 8.3)
- 2.5. Les constantes de classe
- 2.6. Les classes abstraites
- 2.7. Les méthodes et les propriétés statiques
- 2.8. Les classes et méthodes finales
- 2.9. Les interfaces
- 2.10. Les traits
- 2.11. Exercices
- 🎮 Exercices du chapitre 2
- 3. Les énumérations (PHP 8.1)
- 4. Les espaces de noms
- 5. Auto-chargement des classes
- 6. Les exceptions
- 7. Le match et les autres nouveautés PHP 8 utiles
- 8. Le mapping de tables SQL en classes PHP
- 9. Les Managers
- 10. Mini-projet final — L'Arène des Héros
- Annexe — Mémo des nouveautés objet PHP 8.0 à 8.5
Annexe — Mémo des nouveautés objet PHP 8.0 à 8.5
Fonctionnalité | Version | Exemple minimal |
|---|---|---|
Promotion de propriétés | 8.0 | __construct(private string $nom) {} |
Arguments nommés | 8.0 | new Pizza(ananas: true) |
Expression match | 8.0 | match($x) { 1, 2 => 'a', default => 'b' } |
Opérateur nullsafe | 8.0 | $user->adresse?->ville |
Types union | 8.0 | int|float $force |
Attributs | 8.0 | #[Route('/users')] |
Type de retour static | 8.0 | public static function create(): static |
Énumérations | 8.1 | enum Statut: string { case Publie = 'publie'; } |
Propriétés readonly | 8.1 | public readonly string $id; |
Callable de 1re classe | 8.1 | $f = strtoupper(...); |
new dans les initialiseurs | 8.1 | function __construct($log = new NullLogger()) |
Constantes final | 8.1 | final const X = 1; |
Classes readonly | 8.2 | readonly class Point { ... } |
Constantes dans les traits | 8.2 | trait T { const X = 1; } |
Propriétés dynamiques dépréciées | 8.2 | #[\AllowDynamicProperties] pour y déroger |
Constantes de classe typées | 8.3 | public const string NOM = 'x'; |
#[\Override] | 8.3 | vérifie qu'une méthode redéfinit bien le parent |
__clone() et readonly | 8.3 | réinitialisation autorisée pendant le clonage |
Property hooks | 8.4 | public int $pv { set(int $v) { ... } } |
Visibilité asymétrique | 8.4 | public private(set) int $score; |
new sans parenthèses | 8.4 | new MaClasse()->methode() |
Objets paresseux | 8.4 | initialisation différée (frameworks/ORM) |
Opérateur pipe | 8.5 | $x |> trim(...) |> strtoupper(...) |
final sur propriétés promues | 8.5 | __construct(public final string $nom) |