XCII. Proprietà object e method call overloading

Introduzione

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.

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.

Avvertimento

Questo modulo non è parte di PHP 5. Php 5 gestisce le chiamate __get(), __set() and __call() in modo nativo. Vedere la pagina l'overload in PHP 5 per maggiori dettagli.

Requisiti

Non sono necessarie librerie esterne per utilizzare questo modulo.

Installazione

Per potere utilizzare queste funzioni occorre compilare il PHP con --enable-overload. A partire dal PHP 4.3.0 questo modulo è abilitato per default. Si può disabilitare il supporto overload tramite --disable--overload.

La versione per Windows di PHP ha già compilato il supporto per questo modulo. Non occorre caricare alcun modulo addizionale per potere utilizzare queste funzioni.

Nota: Il supporto per questo modulo è compilato per default a partire dal PHP 4.3.0.

Configurazione di Runtime

Questa estensione non definisce alcuna direttiva di configurazione in php.ini

Tipi di risorse

Questa estensione non definisce alcun tipo di risorsa.

Costanti predefinite

Questa estensione non definisce alcuna costante.

Esempi

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;
echo
"\$o->a: $o->a\n"; // print: $o->a:
echo "\$o->b: $o->b\n"; // print: $o->b: 9
echo "\$o->c: $o->c\n"; // print: $o->c: 42
echo "\$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);

?>

Sommario
overload -- Abilita le proprietà e il method call overloading per una classe

Hosting by: hurra.com
Generated: 2007-01-26 17:56:37