Come abbiamo imparato nel corso delle lezioni precedenti, all'interno delle classi possiamo dichiarare dei metodi "speciali" che vengono definiti metodi magici. Essi, che sono sintatticamente riconoscibili tramite il doppio underscore ("__") iniziale, sono davvero molto importanti. A questo punto della guida abbiamo già analizzato due metodi magici: il metodo costruttore (__construct) ed il metodo distruttore (__destruct).
Come è facile intuire, un metodo magico viene azionato (o invocato) quando si verifica una determinata situazione con la classe o le istanze della stessa. Ecco una panoramica veloce dei metodi magici disponibili con PHP5, che andremo ad analizzare dettagliatamente nel paragrafo successivo e nella prossima lezione:
| Nome metodo | Azionato quando... |
|---|---|
| __construct | viene creata una nuova istanza della classe |
| __destruct | viene distrutta un'istanza |
| __call | viene richiamato un metodo inaccessibile (nel contesto di un oggetto) |
| __callStatic | viene richiamato un metodo inaccessibile (nel contesto statico) |
| __set | viene usata in scrittura una proprietà inaccessibile |
| __get | viene usata in lettura una proprietà inaccessibile |
| __isset | viene richiamata la funzione isset con una proprietà inaccessibile |
| __unset | viene richiamata la funzione unset con una proprietà inaccessibile |
| __sleep | viene richiamata la funzione serialize con un'istanza |
| __wakeup | viene richiamata la funzione unserialize con un'istanza |
| __toString | vengono richiamate la funzioni echo o print con un'istanza |
| __invoke | viene utilizzato un oggetto come una funzione |
| __set_state | viene richiamata la funzione var_export con un'istanza |
| __clone | viene clonato un oggetto con l'operatore clone |
Questi due metodi magici sono molto simili, l'unica differenza è che il primo utilizza l'ambito dinamico mentre il secondo, disponibile dalla versione 5.3.0, utilizza l'ambito statico:
class MyClass {
public function __call($name, $args) {
echo "È stato richiamato il metodo " . $name . " con i seguenti argomenti: ";
foreach($args as $arg) echo $arg . " ";
}
public function __callStatic($name, $args) {
echo "È stato richiamato il metodo " . $name . " in un contesto statico con i seguenti argomenti: ";
foreach($args as $arg) echo $arg . " ";
}
}
$obj1 = new MyClass();
// stampa "È stato richiamato il metodo setName con i seguenti argomenti: George"
$obj1->setName("George");
// stampa "È stato richiamato il metodo setName in un contesto con i seguenti argomenti: George"
MyClass::setName("George");
Anche in questo caso, come nel precedente, si tratta di metodi magici che attuano il principio di overloading. Il loro comportamento è abbastanza intuitivo, l'unica considerazione da fare è che, nel caso si imposti una variabile e si utilizza il metodo magico __set, occorrerà impostarla manualmente all'interno del corpo del metodo stesso.
class MyClass {
public function __get($name) {
echo "Si è tentato di accedere alla proprietà \"" . $name . "\" ma non è disponibile";
}
public function __set($name, $value) {
echo "Si è tentato di impostare la proprietà \"" . $name . "\" al valore " . $value;
}
}
$obj1 = new MyClass();
// stampa "Si è tentato di accedere alla proprietà "a" ma non è disponibile"
echo $obj1->a;
// stampa "Si è tentato di impostare la proprietà "a" al valore 10"
$obj1->a = 10;
Gli ultimi due metodi magici che consentono l'overloading sono __isset ed __unset. Il loro comportamento è molto intuitivo:
class MyClass {
public function __isset($name) {
echo "Si è tentato di richiamare isset con la proprietà \"" . $name . "\" ma non è disponibile";
}
public function __unset($name) {
echo "Si è tentato di richiamare unset con la proprietà \"" . $name . "\" ma non è disponibile";
}
}
$obj1 = new MyClass();
// stampa "Si è tentato di richiamare isset con la proprietà "a" ma non è disponibile"
echo isset($obj1->a);
// stampa "Si è tentato di richiamare unset con la proprietà "a" ma non è disponibile"
unset($obj1->a);
Sessioni PHP: cosa sono, come si usanoDalla configurazione di PHP, alla gestione delle sessioni in un... |
Continuous Integration: automatizziamo i client con PhingContinuous Integration: automatizziamo i client con Phing. Esempi... |
Archiviazione delle applicazioni PHP con PharCome incorporare intere applicazioni PHP all'interno di un singolo... |
I traits in PHP 5.4Cosa sono, a cosa servono e come si unsano i traits, la novità per... |
PHP 5.4: il web server integratoImpara ad usare il web server integrato nella versione 5.4 di PHP:... |
Guida Yii FrameworkCome creare applicazioni Web in modo semplice e veloce con il... |
Guida Applicazioni Facebook con PHPCome realizzare un'applicazione per Facebook. Dalle basi della... |
Guida PHP con Windows e IISInstallare ambienti per lo sviluppo e la produzione di applicazioni... |
Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.
Iscriviti alla newsletter
|
|
Corso PHP per Webmaster11 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base25 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base05 Giugno 2012 a Roma |