back-end php Beginner 3 min

OOP PHP: classi, oggetti, costruttore, distruttore

__construct, __destruct, new, clone, property access

· 583 parole

Una classe è un progetto: descrive quali dati (proprietà) e quali comportamenti (metodi) avrà ogni cosa costruita a partire da essa. Un oggetto è una di quelle «cose»: un'istanza concreta della classe, con i suoi valori propri.

La classe è il progetto architettonico di una casa: definisce quante stanze avrà, dove sarà la cucina. L'oggetto è ogni casa realmente costruita da quel progetto, puoi costruirne cento, tutte con la stessa struttura, ma ciascuna con mobili, colori e abitanti diversi.

1. new e __construct: nascere con i dati giusti

La parola chiave new crea un oggetto a partire da una classe. Se la classe definisce un metodo __construct(), PHP lo chiama automaticamente in quel momento: è il posto giusto per inizializzare le proprietà con i valori ricevuti.

class Prodotto
{
    public string $nome;
    public float $prezzo;

    public function __construct(string $nome, float $prezzo)
    {
        $this->nome = $nome;
        $this->prezzo = $prezzo;
    }
}

$penna = new Prodotto('Penna', 1.50);

echo $penna->nome; // 'Penna'

Dentro la classe, $this fa sempre riferimento all'oggetto corrente, quello su cui il metodo è stato chiamato, non alla classe in astratto.

Fonte: PHP Manual — «Constructors and Destructors»: __construct() viene chiamato automaticamente ogni volta che un nuovo oggetto viene creato con new.

2. Property access: leggere e chiamare con ->

L'operatore -> accede a proprietà e metodi di un oggetto, non si usa il punto . come in altri linguaggi, il punto, in PHP, è riservato alla concatenazione di stringhe.

$penna->prezzo;          // legge la proprietà

$penna->prezzo = 2.00;   // la modifica

$penna->descrivi();      // chiama un metodo

3. __destruct: l'ultimo saluto, quando l'oggetto sparisce

Il metodo __destruct() viene chiamato automaticamente quando non esistono più riferimenti a quell'oggetto, di norma quando il garbage collector di PHP se ne libera, oppure alla fine dello script.

class Connessione
{
    public function __construct()
    {
        echo "Connessione aperta\n";
    }

    public function __destruct()
    {
        echo "Connessione chiusa\n";
    }
}

function usaConnessione()
{
    $c = new Connessione();
    // "Connessione aperta"
}

// fine funzione: $c esce di scope -> "Connessione chiusa"

Utile per operazioni di «pulizia», chiudere una connessione, rilasciare una risorsa senza doverle richiamare a mano ogni volta.

4. clone: copiare un oggetto, con un'insidia da conoscere

Assegnare un oggetto a un'altra variabile non lo copia, copia solo il riferimento, come già visto per gli oggetti JavaScript. Per ottenere davvero una copia indipendente serve la parola chiave clone.

$originale = new Prodotto('Penna', 1.50);

$copia = clone $originale;

$copia->prezzo = 3.00;

echo $originale->prezzo;
// 1.50 -- l'originale non è cambiato

Ma il manuale segnala l'insidia: clone fa una copia superficiale se una proprietà è a sua volta un riferimento a un altro oggetto, quel riferimento resta condiviso tra originale e copia. Per intervenire, si definisce un metodo magico __clone(), chiamato automaticamente subito dopo la copia.

class Ordine
{
    public Prodotto $prodotto;
    // riferimento a un altro oggetto

    public function __clone(): void
    {
        $this->prodotto = clone $this->prodotto;
        // copia anche il prodotto
    }
}

Fonte: PHP Manual — «Object Cloning»: clone esegue una copia superficiale di un oggetto; se una proprietà è un riferimento a un altro oggetto resta un riferimento anche dopo il clone, a meno di intervenire con __clone().

In sintesi

Concetto Cosa fa Quando entra in gioco
class / new Il progetto e le istanze create da esso Ogni volta che serve un nuovo oggetto
__construct() Inizializza le proprietà alla creazione Chiamato automaticamente da new
__destruct() Pulizia quando l'oggetto sparisce Automatico, a fine scope o script
-> Accede a proprietà e metodi Mai il punto: quello è per le stringhe
clone Copia indipendente (ma superficiale) Gli oggetti annidati restano condivisi

Questi cinque concetti bastano per capire qualsiasi classe PHP che incontrerai, dalle più semplici ai framework più complessi.

Accedi o registrati per votare, salvare o commentare la pillola

Commenti (0)

Registrati per commentare, fare domande e proporre l'argomento della prossima pillola (oppure accedi se hai già un account).

Nessun commento. Sii il primo a scrivere qualcosa.

Pillole correlate