Cos’è una classe in PHP?

Titolo: Introduzione avanzata alle classi in PHP: concetti fondamentali, sintassi e buone pratiche

In PHP, una classe è un modello (o blueprint) che definisce il comportamento e le proprietà che gli oggetti creati da essa avranno. Le classi sono il cuore della programmazione orientata agli oggetti (OOP), paradigma che consente di scrivere codice più modulare, riutilizzabile e organizzato.

Immagina una classe come una struttura concettuale che descrive un oggetto del mondo reale: un’automobile, un utente, un prodotto.

class Automobile {
    public $marca;
    public $modello;

    public function avviaMotore() {
        echo "Motore avviato!";
    }
}

In questo esempio, la classe Automobile definisce due proprietà (marca e modello) e un metodo (avviaMotore). Ma questo è solo l’inizio.

Oggetti: l’istanza della classe

Una classe da sola non fa nulla finché non viene creata un’istanza, cioè un oggetto.

$miaAuto = new Automobile();
$miaAuto->marca = "Fiat";
$miaAuto->modello = "Panda";

$miaAuto->avviaMotore(); // Output: Motore avviato!

L’oggetto $miaAuto è una istanza della classe Automobile. Ora ha un proprio stato (le proprietà marca e modello) e può eseguire azioni (avviaMotore).

Proprietà e metodi: stati e comportamenti

Proprietà

Le proprietà sono le variabili definite all’interno di una classe. Rappresentano lo stato dell’oggetto.

class Libro {
    public $titolo;
    public $autore;
}

Metodi

I metodi sono le funzioni contenute in una classe. Definiscono i comportamenti dell’oggetto.

class Libro {
    public $titolo;
    public $autore;
}

Visibilità: public, private, protected

PHP permette di controllare l’accesso a proprietà e metodi con le parole chiave:

  • public: accessibile ovunque

  • private: accessibile solo all’interno della classe

  • protected: accessibile nella classe e nelle sue sottoclassi

Esempio pratico:

class Libro {
    public $titolo;
    public $autore;

    public function leggi() {
        echo "Stai leggendo '$this->titolo' di $this->autore.";
    }
}

Il saldo non può essere modificato direttamente dall’esterno: solo tramite i metodi pubblici. Questo è un principio dell’OOP noto come incapsulamento.

Costruttore: __construct()

Il costruttore è un metodo speciale che viene eseguito automaticamente quando viene creata una nuova istanza della classe.

class Libro {
    public $titolo;
    public $autore;

    public function leggi() {
        echo "Stai leggendo '$this->titolo' di $this->autore.";
    }
}

Ora possiamo creare un utente più velocemente:

class Utente {
    public $nome;

    public function __construct($nome) {
        $this->nome = $nome;
    }
}

Ereditarietà: estendere una classe

PHP supporta l’ereditarietà singola: una classe può ereditare da un’altra.

class Animale {
    public function faiVerso() {
        echo "Verso generico";
    }
}

class Cane extends Animale {
    public function faiVerso() {
        echo "Bau!";
    }
}
$dog = new Cane();
$dog->faiVerso(); // Output: Bau!

Il metodo faiVerso() è stato sovrascritto nella sottoclasse Cane.

Il concetto di $this

Il $this è una variabile speciale che fa riferimento all’istanza corrente dell’oggetto. Serve per accedere a proprietà e metodi all’interno della stessa classe.

public function saluta() {
    echo "Ciao, sono $this->nome!";
}

Staticità: proprietà e metodi static

I metodi e le proprietà statiche non richiedono un oggetto per essere utilizzati. Si accede ad essi direttamente dalla classe.

class Matematica {
    public static function somma($a, $b) {
        return $a + $b;
    }
}

echo Matematica::somma(3, 4); // 7

Autoloading e Namespaces

Autoload

Per progetti più complessi, PHP permette il caricamento automatico delle classi con spl_autoload_register() o tramite Composer.

class Matematica {
    public static function somma($a, $b) {
        return $a + $b;
    }
}

echo Matematica::somma(3, 4); // 7

Namespace

Per evitare conflitti tra nomi di classi:

namespace App\Modelli;

class Utente {
    // ...
}

Poi puoi usare:

use App\Modelli\Utente;

Tipizzazione delle proprietà e dei parametri

A partire da PHP 7.4 puoi tipizzare le proprietà, mentre da PHP 8 anche i parametri e i ritorni:

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

    public function getPrezzo(): float {
        return $this->prezzo;
    }
}

Questo migliora l’affidabilità del codice.

Classi astratte e interfacce

Classi astratte

Non possono essere istanziate direttamente, ma servono da base per altre classi.

abstract class Forma {
    abstract public function calcolaArea();
}

Interfacce

Definiscono solo i metodi che una classe deve implementare.

interface Spedibile {
    public function spedisci($destinazione);
}

Trait: Riutilizzare codice in più classi

PHP non supporta ereditarietà multipla, ma consente di riutilizzare codice con i trait:

trait Logger {
    public function log($msg) {
        echo "[LOG] $msg";
    }
}

class Sistema {
    use Logger;
}

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.