0Pricing
PHP Academy · Lezione

Costruttori e distruttori

Inizializzare gli oggetti con __construct e liberarli con __destruct.

Costruttori e distruttori è una lezione PHP Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento PHP Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso PHP Academy include 4 lezioni in totale.

Introduzione: Costruttori e distruttori

Il metodo __construct() viene eseguito automaticamente quando viene creato un nuovo oggetto. Il metodo __destruct() viene eseguito quando l'oggetto viene raccolto dal garbage collector. PHP 8 ha introdotto la promozione delle proprietà del costruttore.

Concetti fondamentali

Concetti chiave di costruttori e distruttori:

  • __construct() inizializza l'oggetto
  • La promozione delle proprietà del costruttore riduce il codice
  • __destruct() per la pulizia (handle di file, connessioni)
  • Il costruttore della classe padre viene chiamato con parent::__construct()

Costruttore di base

Esempio:

<?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

Promozione delle proprietà del costruttore (PHP 8)

Continuazione:

<?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

Validazione nel costruttore

Esercizio:

<?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

Distruttore

Più in profondità:

<?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';
    }
}

Pattern dei costruttori denominati

Utilizzo avanzato:

<?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

Costruttore della classe padre

Pattern del mondo reale:

<?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!

Late static binding nei costruttori

Buone pratiche:

<?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

Pattern pratico

Riuniamo tutti i concetti in un pattern pratico per costruttori e distruttori.

Errori comuni

Eviti questi errori comuni con costruttori e distruttori:

  • Chiami sempre parent::__construct() quando estende una classe
  • Utilizzi la promozione delle proprietà del costruttore in PHP 8+ per ridurre il codice ripetitivo
  • Non è garantito che il distruttore venga eseguito in un momento specifico
  • Preferisca i costruttori denominati a più overload di __construct()

Verifica rapida

Che cos'è la promozione delle proprietà del costruttore in PHP 8?

Riepilogo: Costruttori e distruttori

Ha trattato i costruttori e i distruttori. Punti chiave da ricordare:

  • Chiami sempre parent::__construct() quando estende una classe
  • Utilizzi la promozione delle proprietà del costruttore in PHP 8+ per ridurre il codice ripetitivo
  • Non è garantito che il distruttore venga eseguito in un momento specifico
  • Preferisca i costruttori denominati a più overload di __construct()

Domande Frequenti

La lezione «Costruttori e distruttori» è gratuita?

Sì — il testo completo di «Costruttori e distruttori» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso PHP Academy, passa a CoddyKit PRO. Il corso PHP Academy include 4 lezioni in totale.

Cosa imparerò in «Costruttori e distruttori»?

Inizializzare gli oggetti con __construct e liberarli con __destruct. Eserciti PHP Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare PHP Academy?

Non è richiesta alcuna esperienza precedente. PHP Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Costruttori e distruttori»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione PHP Academy?

Sì. Ogni lezione PHP Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Classi, proprietà e metodi
  2. Costruttori e distruttori
  3. Proprietà e metodi statici
  4. Panoramica dei metodi magici
← Torna a PHP Academy