La seguente classe Bicicletta è una possibile implementazione per una bicicletta:
<?php
class Bicicletta {
private $pedalata = 0;
private $velocita = 0;
private $marcia = 0;
public function cambiaPedalata($nuovoValore){
$this->pedalata=$nuovoValore;
}
public function cambiaMarcia($nuovoValore){
$this->marcia = $nuovoValore;
}
public function aumentaVelocità($incremento){
$this->velocita = $this->velocita + $incremento;
}
public function frena($decremento){
$this->velocita = $this->velocita - $decremento;
}
public function stampaStato(){
echo $this;
}
public function __toString() {
$statoComeTesto=<<<EOT
<p>
Pedalata: {$this->pedalata};<br />
velocità: {$this->velocita};<br />
marcia: {$this->marcia};
</p>
EOT;
return $statoComeTesto;
}
}
?>
La sintassi del linguaggio potrebbe apparirti nuova, ma il progetto di questa classe è fondato su quanto detto nel precedente post sugli oggetti bicicletta. I campi pedalata, velocita e marcia rappresentano lo stato dell’oggetto, e i metodi (cambiaPedalata, cambiaMarcia, aumentaVelocita ecc.) definiscono l’interazione con il mondo esterno.class Bicicletta {
private $pedalata = 0;
private $velocita = 0;
private $marcia = 0;
public function cambiaPedalata($nuovoValore){
$this->pedalata=$nuovoValore;
}
public function cambiaMarcia($nuovoValore){
$this->marcia = $nuovoValore;
}
public function aumentaVelocità($incremento){
$this->velocita = $this->velocita + $incremento;
}
public function frena($decremento){
$this->velocita = $this->velocita - $decremento;
}
public function stampaStato(){
echo $this;
}
public function __toString() {
$statoComeTesto=<<<EOT
<p>
Pedalata: {$this->pedalata};<br />
velocità: {$this->velocita};<br />
marcia: {$this->marcia};
</p>
EOT;
return $statoComeTesto;
}
}
?>
La classe così definita non fa nulla all'interno del file sorgente poiché è solo uno stampo per la creazione dei nuovi oggetti Bicicletta. La responsabilità per la creazione degli oggetti e il loro utilizzo dipende da altre classi, funzioni o dal corpo principale dello script.
Ecco un esempio di script che crea due oggetti Bicicletta e invoca i loro metodi:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Pagina di Test per bicicletta</title>
</head>
<body>
<?php
// Creo due differenti oggetti Bicicletta
$bici1 = new Bicicletta();
$bici2 = new Bicicletta();
// Invoco i metodi sugli oggetti
$bici1->cambiaPedalata(50);
$bici1->aumentaVelocità(10);
$bici1->stampaStato();
$bici2->cambiaPedalata(50);
$bici2->aumentaVelocità(10);
$bici2->cambiaMarcia(2);
$bici2->cambiaPedalata(40);
$bici2->aumentaVelocità(10);
$bici2->cambiaMarcia(3);
echo $bici2;
?>
</body>
</html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Pagina di Test per bicicletta</title>
</head>
<body>
<?php
// Creo due differenti oggetti Bicicletta
$bici1 = new Bicicletta();
$bici2 = new Bicicletta();
// Invoco i metodi sugli oggetti
$bici1->cambiaPedalata(50);
$bici1->aumentaVelocità(10);
$bici1->stampaStato();
$bici2->cambiaPedalata(50);
$bici2->aumentaVelocità(10);
$bici2->cambiaMarcia(2);
$bici2->cambiaPedalata(40);
$bici2->aumentaVelocità(10);
$bici2->cambiaMarcia(3);
echo $bici2;
?>
</body>
</html>
L’output di questo test visualizza nel browser la pedalata, velocità e marcia per le due biciclette:
![]() |
Output del progetto DemoBicicletta |
Nota: Per provare questo programma nel tuo ambiente di sviluppo (per sapere come preparare l'ambiente di sviluppo e creare un progetto fai riferimento ai post precedenti):
- Crea un nuovo progetto con nome DemoBicicletta
- Cancella il contenuto del file index.php
- Copia e incolla la definizione della classe in index.php
- Copia e incolla il codice dello script subito dopo la definizione della classe
- Salva e scegli Run|Run Project
- Volendo puoi anche familiarizzare con xdebug scegliendo Debug|Debug Project. Per procedere un passo alla volta scegli Debug|Step Into o premi F7. Osserva come variano i dati nel pannello Variables e come cambia il pannello Call Stack man mano che vengono invocati i metodi dalla riga di codice
$bici1->stampaStato(); .
XDebug al lavoro