Le classi PHP sono uno dei concetti fondamentali della programmazione orientata agli oggetti (OOP) in PHP. Ti spiegherò i concetti principali in modo semplice, con esempi pratici.
Cos’è una classe?
Una classe è un modello o schema che definisce proprietà (variabili) e metodi (funzioni) che un oggetto può avere. In pratica, una classe è come un progetto, e un oggetto è un’istanza concreta di quel progetto.
Creare una classe in PHP
Per creare una classe in PHP, si usa la parola chiave class
. Ecco un esempio base:
<?php class Automobile { // Proprietà (variabili della classe) public $marca; public $modello; // Metodo (funzione della classe) public function descrizione() { return "Questa automobile è una $this->marca $this->modello."; } } // Creare un'istanza (oggetto) della classe $auto1 = new Automobile(); $auto1->marca = "Fiat"; $auto1->modello = "Panda"; // Usare un metodo echo $auto1->descrizione(); ?>
Risultato:
Questa automobile è una Fiat Panda.
Proprietà
Le proprietà sono variabili definite all’interno della classe. Possono essere pubbliche (public
), private (private
) o protette (protected
).
- Public: Accessibile ovunque.
- Private: Accessibile solo all’interno della classe.
- Protected: Accessibile dalla classe e dalle sue sottoclassi.
Esempio:
class Persona { public $nome; // Accessibile ovunque private $password; // Accessibile solo nella classe public function setPassword($pass) { $this->password = $pass; // Imposta la password } public function mostraPassword() { return $this->password; // Restituisce la password } } $persona = new Persona(); $persona->nome = "Mario"; $persona->setPassword("12345"); echo $persona->mostraPassword(); // Mostra "12345"
Metodi
I metodi sono funzioni definite all’interno di una classe. Puoi usare il prefisso public
, private
o protected
per definire la visibilità.
Esempio:
class Calcolatrice { public function somma($a, $b) { return $a + $b; } } $calcolatrice = new Calcolatrice(); echo $calcolatrice-&amp;gt;somma(5, 3); // Mostra 8
Costruttori
Un costruttore è un metodo speciale che viene chiamato automaticamente quando un oggetto viene creato. Si definisce con __construct
.
Esempio:
class Automobile { public $marca; public $modello; // Costruttore public function __construct($marca, $modello) { $this->marca = $marca; $this->modello = $modello; } public function descrizione() { return "Questa automobile è una $this->marca $this->modello."; } } $auto = new Automobile("Tesla", "Model S"); echo $auto->descrizione(); // Mostra: Questa automobile è una Tesla Model S.
Ereditarietà
L’ereditarietà permette a una classe di “ereditare” le proprietà e i metodi di un’altra classe. Si usa la parola chiave extends
.
Esempio:
class Veicolo { public $tipo; public function descrizione() { return "Questo è un $this->tipo."; } } class Moto extends Veicolo { public $marca; public function dettagli() { return "Questa è una moto della marca $this->marca."; } } $moto = new Moto(); $moto->tipo = "veicolo a due ruote"; $moto->marca = "Ducati"; echo $moto->descrizione(); // Mostra: Questo è un veicolo a due ruote. echo $moto->dettagli(); // Mostra: Questa è una moto della marca Ducati.
Encapsulation
L’incapsulamento è il principio di nascondere i dettagli interni della classe, usando private
o protected
per le proprietà e fornendo metodi pubblici per accedere o modificare i dati.
Esempio:
class ContoBancario { private $saldo = 0; public function deposita($importo) { $this->saldo += $importo; } public function preleva($importo) { if ($importo > $this->saldo) { return "Saldo insufficiente."; } $this->saldo -= $importo; return "Prelievo effettuato."; } public function mostraSaldo() { return "Il saldo è: €" . $this->saldo; } } $conto = new ContoBancario(); $conto->deposita(500); echo $conto->mostraSaldo(); // Mostra: Il saldo è: €500 echo $conto->preleva(300); // Mostra: Prelievo effettuato. echo $conto->mostraSaldo(); // Mostra: Il saldo è: €200
Polimorfismo
Il polimorfismo consente di usare lo stesso metodo in classi diverse, ma con comportamenti differenti.
Esempio:
class Animale { public function parla() { return "L'animale fa un suono."; } } class Cane extends Animale { public function parla() { return "Il cane abbaia."; } } class Gatto extends Animale { public function parla() { return "Il gatto miagola."; } } $animali = [new Cane(), new Gatto(), new Animale()]; foreach ($animali as $animale) { echo $animale->parla() . "<br>"; }
Risultato:
- Il cane abbaia.
- Il gatto miagola.
- L’animale fa un suono.