29. Metodi Magici

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.