PHP 5 ci fornisce un supporto aggiuntivo per potenziare le nostre classi attraverso la definizione di determinati metodi detti Metodi Magici, in quanto sono nativi di PHP e non è possibile dichiararne di propri con lo stesso nome (riservati).
Vediamo subito una lista di questi metodi e i servizi che offrono :
- __toString() – Metodo per restituire l’oggetto sotto forma di stringa
- __set() – Permette l’overloading per assegnare un valore ad un attributo
- __get() – Consente l’overloading delle istruzioni di lettura di un attributo
- __isset() – Overloading del metodo isset() per gli attributi di una classe (disponibile da PHP 5.1.0)
- __unset() – Overloading del metodo unset() per gli attributi di una classe (disponibile da PHP 5.1.0)
- __call() – Permette l’overloading dei metodi di una classe
- __clone() – Consente l’overloading per la clonazione degli oggetti
- __autoload() – Funzione per l’auto-inclusione di file per classi non ancora definite
- __sleep() – Richiamato subito prima di una serializzazione di un oggetto
- __wakeup() – Richiamato subito dopo una serializzazione di un oggetto
- __set_state() – Metodo statico richiamato per le classi esportate con var_export() (disponibile da PHP 5.1.0)
Overload di __toString()
Prototipo della funzione :
string __toString()
Effettuando l’overloading di questa funzione, consentiremo a PHP 5 di trattare le istanze della nostra classe come stringhe, qualora venissero fatte su di esse operazioni come ad esempio la stampa su schermo con echo o ancora la concatenazione fra stringhe ecc…
Non essendo supportato un tipo di casting implicito da Oggetto a Stringa, questo risulta un ottimo metodo per aggiungere tale supporto alle nostre classi :
<?php
class Persona
{
private $nome;
private $cognome;
public function Persona($n, $c)
{
$this->nome = $n;
$this->cognome = $c;
}
public function __toString()
{ return $this->nome . " " . $this->cognome; }
}
$obj = new Persona("John", "Doe");
echo $obj; // Stampa "John Doe"
$stringa = "Ciao sono " . $obj;
echo $stringa; // Stampa "Ciao sono John Doe"
?>
Nota : Prima di PHP 5.2.0, __toString() veniva chiamato solo in combinazione con echo e print.
Nei capitoli a seguire vedremo nel dettaglio l’overload degli altri Metodi Magici sopra elencati.
Versione originale dell’articolo
Lezione Precedente -> Guida Php – Serializzare gli oggetti
Lezione Successiva -> Guida Php – Il metodo Magico __set()
