Il metodo magico toString nella OOP in PHP
Il primo metodo magico che
studiermo si chiama __toString. Esso
viene chiamato quando si tenta di convertire un'istanza
di classe in stringa. Cerchiamo di capire cosa
significa. Supponiamo di avere questa classe
User:
<?php
class User
{
private $name;
private $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
Creiamo un oggetto di questa classe:
<?php
$user = new User('john', 25);
?>
Ora proviamo a stampare l'oggetto creato
tramite echo:
<?php
$user = new User('john', 25);
echo $user;
?>
Il tentativo di stampare un oggetto tramite echo
corrisponde a una conversione in stringa. In questo
caso PHP darà un errore, poiché semplicemente
gli oggetti non possono essere convertiti in stringa così.
Per eliminare l'errore, dobbiamo
dire esplicitamente a PHP cosa fare quando
si tenta di convertire un oggetto in stringa. A
questo scopo esiste il metodo magico
__toString.
Se nel codice della nostra classe creiamo questo metodo,
allora il risultato di questo metodo (cioè ciò che
restituisce tramite return) sarà la rappresentazione
stringa dell'oggetto.
Supponiamo di volere che quando si tenta di stampare
l'oggetto tramite echo, venga visualizzato il nome
utente. Quindi creiamo il metodo __toString
e restituiamo in esso il valore della proprietà name:
<?php
class User
{
private $name;
private $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
// Implementiamo il metodo specificato:
public function __toString()
{
return $this->name;
}
public function getName()
{
return $this->name;
}
public function getAge()
{
return $this->age;
}
}
?>
Verifichiamo:
<?php
$user = new User('john', 25);
echo $user; // stamperà 'john' - tutto funziona!
?>
Create una classe User, in cui ci siano
le proprietà name e surn.
Fate in modo che quando
si stampa l'oggetto tramite echo sullo schermo
venga visualizzata una stringa con il nome e il cognome dell'utente.