I metodi magici della programmazione ad oggetti di PHP 5

2007-10-09 | Tags: ,

La programmazione ad oggetti in PHP, con la versione 5, ha subito un notevole potenziamento.

Tra le implementazioni più interessanti, ci sono i metodi magici. I metodi magici sono funzioni che vengono evocante implicitamente al verificarsi di un evento.

Analizziamoli uno per uno, spiegandone la funzionalità e vedendo praticamente come utilizzarli.

__construct

Ogni classe che si rispetti la si instanzia o, volendo utilizzare una terminologia grezza, la si costruisce.

Precedentemente alla versione 5 di PHP, per istanziare una classe occorreva creare una funzione che avesse lo stesso nome della classe. Con PHP 5, c’è il metodo magico __construct; tutte le operazioni dichiarate all’interno della funzione che porta questo nome saranno eseguite al momento della creazione dell’oggetto.

__destruct

Una volta terminato l’utilizzo di una classe è buona norma distruggerla per evitare di tenere allocate risorse inutili. Molto spesso, all’interno di una classe si eseguono operazioni che allocano ulteriori risorse; ad esempio connessioni a database, a file o a directory allocano risorse di sistema che sarebbe buona norma rilasciare alla fine delle operazioni.

Con PHP 5 tutte le operazioni atte al rilascio delle risorse si possono dichiarare all’interno della funzione magica __destruct, la quale viene evocata al momento della distruzione di un oggetto.

__call

Questa funzione magica ha il compito di intercettare richieste ad interfacce non implementate in una classe. In condizioni normali, se evochiamo una interfaccia non implementata in una classe, quest’ultima restituisce una errore. Se invece implementiamo la funzione __call, quest’ultima di incaricherà di intercettare le richieste non implementate.

La funzione implementa due variabili, la prima è l’interfaccia non implementata, la seconda sono tutti gli argomenti passati all’interfaccia.

__get

Questa funzione magica rientra in quelle definiti di overloading. Lo scopo delle funzioni di overloading è quello di “sovrascrivere” un comportamento standard con uno personalizzato.

Implementato la funzione __get, andremo a modificare il normale comportamento che ha il PHP quando evochiamo una determinata variabile.

__set

Come per la funzione magica __get, anche la funzione __set è di overloading. Viene evocata quando si esegue una operazione di assegnazione su di una variabile.

__isset e __unset

Gli ultimi due metodi della serie overloading sono questi (al momento, ndr.). Sovrascrivono il comportamento delle funzioni omonime del PHP.

__sleep e __wakeup

Questi due metodi magici vengono evocati quando si esegue, rispettivamente, l’operazione serialize e unserialize.

La funzione magica __sleep è utile per liberare risorse che altrimenti sarebbero tenute inutilmente attive.

La funziona magica __wakeup invece permette di ripristinare quest’ultime al momento della de serializzazione dell’oggetto.

__toString

Una classe è un tipo di dati non lineare, ma complesso. Stampare il contenuto di una variabile è un operazione impossibile, se non si prevede una funzione apposita.

Con la funzione __toString si ovvia a questo problema, in quanto questa viene evocata ogni qual volta si decide di stampare l’oggetto.

__clone

Molto spesso si ha l’esigenza di clonare un oggetto. Ma non sempre si desidera una esatta copia dell’oggetto; o più semplicemente si vogliono eseguire particolari operazioni ogni qual volta si esegue una clonazione di un oggetto.

Con la funzione __clone, che viene evocata ogni qual volta si esegue una clonazione di un oggetto, possiamo definire tutte le operazioni che riteniamo necessarie.

__autoload

Questo metodo magico è straordinariamente geniale ed utile. È stato aggiunto per tutti quegli sviluppatori che hanno l’abitudine (ottima, IMHO) di salvare ogni singola classe in un file di testo a se stante avente come nome, il nome della classe stessa.

Con questa funzione magica, il file sarà caricato solo quando la classe viene evocata, snellendo così la fase di interpretazione del codice PHP 5. In effetti, ogni volta che istanzieremo una classe, se una funzione __autoload è stata dichiarata, quest’ultima sarà evocata e si preoccuperà di eseguire le operazioni all’interno dichiarate. La funziona implementa una variabile che è il nome della classe evocata.

Le funzioni magiche, come abbiamo potuto constatare, offrono uno strumento molto potente per realizzare applicazioni solide. Anche noi, tuttavia, possiamo contribuire a rendere solide le nostre applicazioni.

Una buona regola è quella di evitare di creare funzioni all’interno di oggetti che inizino con “__” (doppio underscore, ndr.), questo perché in qualsiasi momento, con l’aggiornarsi del linguaggio, potrebbero essere implementati nuovi metodi magici che potrebbero essere in conflitto con le nostre interfacce.

Per un costante aggiornamento rifarsi alla guida ufficiale Classes and Objects di Zend PHP.

  1. vincy6
    3 maggio 2009 alle 08:28

    Mmmm potevi sprecarti un po di piu…..xD
    pero hai messo solo le funzioni e mi sta bene
    grazie :)

  2. 1 trackbacks
    1. 2007-10-09 - diggita.it