PHP Magic Methods

1.238 visite

php magic methods

Nella versione 5 di PHP sono stati aggiunti  alcuni metodi detti “magici”, i PHP Magic Methods, che è possibile utilizzare nella programmazione OOP (programmazione orientata agli oggetti).

Questi metodi sono identificati con due underscore come prefisso e agiscono come intercettori eseguiti dal sistema quando vengono soddisfatte determinate condizioni.

Questi metodi sono estremamente utili ma entriamo più nel dettaglio.

Di seguito la lista dei magic methods:

  • __construct()
  • __destruct()
  • __call()
  • __callStatic()
  • __get()
  • __set()
  • __isset()
  • __unset()
  • __sleep()
  • __wakeup()
  • __toString()
  • __invoke()
  • __set_state()
  • __clone()

Non è possibile creare dei metodi nostri con lo stesso nome dei php magic methods e più in generale PHP riserva i due underscore __ come prefisso ai metodi magici.

Nei prossimi paragrafi vedremo qualche esempio con i Magic Methods in azione.

__construct() e __destruct()

Di seguito un esempio:

 __call() e __callStatic()

__call() viene attivato quando si invocano metodi inaccessibili nel contesto di un oggetto. Per i metodi in un contesto statico si consiglia di utilizzare __callStatic().

 __get(), __set(), __isset() e __unset()

__set() viene eseguito alla scrittura dei dati e __get() nella lettura dei dati. __isset() e __unset() vengono chiamate quando vengono eseguite le relative funzioni PHP isset() e unset().

 __sleep() e __wakeup()

Questi metodi magici entrano in gioco durante la serializzazione degli oggetti.

PHP richiamerà il metodo __sleep() subito prima di una serializzazione di una istanza della nostra classe.
__wakeup() invece sarà chiamato subito dopo una deserializzazione dell’oggetto, rendendolo utile ad esempio per ristabilire una connessione al database chiusa prima della serializzazione.

Un’ altra differenza fra i due metodi è che __sleep() deve ritornare un’array contenente la lista degli attributi da serializzare, e questo ci consente di avere un controllo maggiore sulle serializzazioni della nostra classe.

Se omettete il valore di ritorno di __sleep() la serializzazione fallirà restituendo un valore NULL.

 __invoke()

Il metodo magico __invoke() viene chiamato quando uno si tenta di chiamare un oggetto come una funzione.

 __clone()

Il metodo magico __clone() viene chiamato quando cloniamo un oggetto con la funzione clone().

 

Iscriviti alla newsletter e rimani sempre aggiornato

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *