31. Il metodo Magico __get()


Overload di __get()

Prototipo della funzione :

mixed __get(string name)

Al contrario di __set(), l'overload di questo metodo ci consente di effettuare operazioni sulla lettura di un attributo.

Il metodo __get viene richiamato quando si tenta di accedere ad attributi con restrizioni (private o protected) o ad attributi non dichiarati.

Vediamo un semplice esempio :

<?php

	class Utente
	{
		private $nickname;
		private $password;
		public $dataiscrizione;

		public function Utente($n, $p)
		{
			$this->nickname = $n;
			$this->password = $p;
			$this->dataiscrizione = "01-01-1970";
		}

		public function __get($attributo)
		{
			switch ($attributo)
			{
				case "nickname" :
					return "Nickname : " . $this->nickname;
					break;

				case "password" :
					return "Password : " . $this->password;
					break;

				default :
					return "Attributo inesistente";
					break;
			}
		}
	}

	$utente = new Utente("johndoe", "mypassword");

	echo $utente->nickname . "<br />";
	echo $utente->password . "<br />";
	echo $utente->dataiscrizione . "<br />";
	echo $utente->nonesisto;

?>

L'esempio produce questo risultato :

Nickname : johndoe
Password : mypassword
01-01-1970
Attributo inesistente

Le prime due echo richiamano __get() e stampano correttamente i due attributi private ossia $nickname e $password, a cui __get() applica anche un prefisso col nome dell'attributo, come si evince dai primi due case della switch.

La terza echo invece stampa direttamente l'attributo $dataiscrizione senza passare da __get(), poichè tale attributo è esistente ed accessibile essendo dichiarato come public.

Infine l'ultima echo passa nuovamente per __get() stampando la stringa "Attributo inesistente" come programmato nell'opzione di default della switch.