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.
