PHP Academy · Leçon

Constructeurs et destructeurs

Initialiser des objets avec __construct et les nettoyer avec __destruct.

Leçon 2 sur 413 étapes

Constructeurs et destructeurs est une leçon PHP Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage PHP Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours PHP Academy comprend 4 leçons au total.

Introduction : constructeurs et destructeurs

La méthode __construct() s'exécute automatiquement lorsqu'un nouvel objet est créé. La méthode __destruct() s'exécute lorsque l'objet est récupéré par le ramasse-miettes. PHP 8 a introduit la promotion des propriétés du constructeur.

Concepts fondamentaux

Concepts clés des constructeurs et des destructeurs :

  • __construct() initialise l'objet
  • La promotion des propriétés du constructeur raccourcit le code
  • __destruct() sert au nettoyage (descripteurs de fichiers, connexions)
  • Le constructeur parent est appelé avec parent::__construct()

Constructeur de base

Exemple :

<?php
class User {
    public string $name;
    public string $email;

    public function __construct(string $name, string $email) {
        $this->name  = $name;
        $this->email = $email;
    }
}

$user = new User('Alice', 'alice@example.com');
echo $user->name; // Alice

Promotion du constructeur (PHP 8)

Suite :

<?php
class User {
    // Shorthand: declare and assign in one go
    public function __construct(
        public readonly string $name,
        public readonly string $email,
        private int $loginCount = 0,
    ) {}
}

$u = new User('Bob', 'bob@test.com');
echo $u->name;  // Bob

Validation dans le constructeur

Entraînement :

<?php
class PositiveInt {
    public function __construct(private int $value) {
        if ($value <= 0) {
            throw new InvalidArgumentException(
                "Value must be positive, got $value"
            );
        }
    }
    public function get(): int { return $this->value; }
}

$n = new PositiveInt(5);  // OK
// new PositiveInt(-1);   // throws

Destructeur

Pour aller plus loin :

<?php
class FileLogger {
    private mixed $handle;

    public function __construct(string $path) {
        $this->handle = fopen($path, 'a');
    }

    public function log(string $msg): void {
        fwrite($this->handle, date('c') . ' ' . $msg . PHP_EOL);
    }

    public function __destruct() {
        if ($this->handle) fclose($this->handle);
        echo 'File handle released';
    }
}

Modèle du constructeur nommé

Utilisation avancée :

<?php
class Money {
    private function __construct(
        private float  $amount,
        private string $currency
    ) {}

    public static function usd(float $a): self { return new self($a, 'USD'); }
    public static function eur(float $a): self { return new self($a, 'EUR'); }

    public function format(): string {
        return number_format($this->amount, 2) . ' ' . $this->currency;
    }
}

echo Money::usd(9.99)->format(); // 9.99 USD

Constructeur parent

Modèle concret :

<?php
class Animal {
    public function __construct(
        protected string $name,
        protected string $sound
    ) {}
}

class Dog extends Animal {
    public function __construct(string $name) {
        parent::__construct($name, 'Woof');
    }
    public function speak(): string {
        return "{$this->name} says {$this->sound}!";
    }
}

echo (new Dog('Rex'))->speak();  // Rex says Woof!

Liaison statique tardive dans les constructeurs

Bonnes pratiques :

<?php
class Base {
    public static function create(): static {
        return new static();  // 'static' resolves to calling class
    }
}

class Child extends Base {}

$base  = Base::create();   // Base object
$child = Child::create();  // Child object — static binding works

Modèle pratique

Mettons tout cela en pratique avec un modèle concret pour les constructeurs et les destructeurs.

Pièges courants

Évitez ces erreurs courantes avec les constructeurs et les destructeurs :

  • Appelez toujours parent::__construct() lorsque vous étendez une classe
  • Utilisez la promotion du constructeur avec PHP 8 ou une version ultérieure pour réduire le code répétitif
  • L'exécution du destructeur n'est pas garantie à un moment précis
  • Préférez les constructeurs nommés à plusieurs surcharges de __construct()

Vérification rapide

Qu'est-ce que la promotion des propriétés du constructeur dans PHP 8 ?

Récapitulatif : constructeurs et destructeurs

Vous avez étudié les constructeurs et les destructeurs. Voici les points essentiels à retenir :

  • Appelez toujours parent::__construct() lorsque vous étendez une classe
  • Utilisez la promotion du constructeur avec PHP 8 ou une version ultérieure pour réduire le code répétitif
  • L'exécution du destructeur n'est pas garantie à un moment précis
  • Préférez les constructeurs nommés à plusieurs surcharges de __construct()
Gratuit pour commencer

Apprends PHP avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
49
Leçons
195

Questions Fréquemment Posées

La leçon « Constructeurs et destructeurs » est-elle gratuite ?

Oui — le texte complet de « Constructeurs et destructeurs » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours PHP Academy, passe à CoddyKit PRO. Le cours PHP Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Constructeurs et destructeurs » ?

Initialiser des objets avec __construct et les nettoyer avec __destruct. Tu pratiques PHP Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer PHP Academy ?

Aucune expérience préalable n'est requise. PHP Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Constructeurs et destructeurs » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon PHP Academy ?

Oui. Chaque leçon PHP Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Classes, propriétés et méthodes
  2. Constructeurs et destructeurs
  3. Propriétés et méthodes statiques
  4. Présentation des méthodes magiques
← Retour à PHP Academy