LXXV. Propriet� object e method call overloading
| Attenzione | 
| 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);
?> | 
 | 
   | Attenzione | 
| 
     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