LXXXII. Proprietà object e method call overloading
| Avvertimento |
Questo modulo è
SPERIMENTALE. Ovvero, il comportamento di queste
funzioni, i nomi di queste funzioni, in definitiva tutto ciò
che è documentato qui può cambiare nei futuri rilasci
del PHP senza preavviso. Siete avvisati, l'uso di questo modulo
è a vostro rischio. |
Lo scopo di questa estensione è di permettere l'overloading delle proprietà
di accesso agli oggetti e dei metodi di chiamata. Solo una funzione è definita
in questa estensione, overload() che prende il
nome dalla classe che ha questa funzionalità abilitata.
La classe nominata ha da definire metodi appropriati se
vuole avere questa funzionalità: __get(),
__set() and __call()
rispettivamente per ricevere/impostare una proprietà, o chiamare un metodo.
Questa strada del sovraccarico può essere selettiva. Dentro queste
funzioni handler l'overloading è disabilitato così si può accedere
alle proprietà dell'oggetto normalmente.
Alcuni semplici esempi sull'uso della funzione
overload()
Esempio 1. Overloading di una classe PHP
<?php
class OO { var $a = 111; var $elem = array('b' => 9, 'c' => 42);
// Callback method for getting a property function __get($prop_name, &$prop_value) { if (isset($this->elem[$prop_name])) { $prop_value = $this->elem[$prop_name]; return true; } else { return false; } }
// Callback method for setting a property function __set($prop_name, $prop_value) { $this->elem[$prop_name] = $prop_value; return true; } }
// Here we overload the OO object overload('OO');
$o = new OO; print "\$o->a: $o->a\n"; // print: $o->a: print "\$o->b: $o->b\n"; // print: $o->b: 9 print "\$o->c: $o->c\n"; // print: $o->c: 42 print "\$o->d: $o->d\n"; // print: $o->d:
// add a new item to the $elem array in OO $o->x = 56;
// instantiate stdclass (it is built-in in PHP 4) // $val is not overloaded! $val = new stdclass; $val->prop = 555;
// Set "a" to be an array with the $val object in it // But __set() will put this in the $elem array $o->a = array($val); var_dump($o->a[0]->prop);
?>
|
|
| Avvertimento |
Siccome è una estensione sperimentale, non tutto
funziona. Non c'è attualmente il supporto per
__call(),
puoi solo overloadare le operazioni di ricezione e di impostazione
per le proprietà. Non puoi invocare l'overloading
handlers originale della classe, e
__set() funziona solo su un livello
di proprietà di accesso.
|
- Sommario
- overload -- Abilita le proprietà e il method call overloading per una classe