Forum und email

Overload

Introduction

Le but de cette extension est de permettre de maîtriser les appels aux méthodes et aux membres d'un objet. Seule une fonction est définie dans cette extension, overload() qui demande le nom de la classe qui doit supporter cette fonctionnalité. Cette classe doit être pourvue des méthodes nécessaires au bon fonctionnement de l'extension, c'est-à-dire : __get(), __set() et __call(), qui servent respectivement à lire, à modifier un membre et à appeler une méthode. De cette manière, l'overloading assure un contrôle sur les fonctions appelées. À l'intérieur de ces méthodes, l'overloading est désactivé, pour que vous puissiez accéder à l'objet.

Warning

Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez ce module à vos risques et périls.

Warning

Cette extension ne fait pas partie de PHP 5. PHP 5 supporte __get(), __set() et __call() nativement. Voir la page traitant de la surcharge en PHP 5 pour plus d'informations.

Pré-requis

Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.

Installation

Afin d'utiliser ces fonctions, vous devez compiler PHP avec l'option --enable-overload. Depuis PHP 4.3.0, cette extension est activée par défaut. Pour la désactiver, utilisez l'option --disable--overload.

La version Windows de PHP dispose du support automatique de cette extension. Vous n'avez pas à ajouter de bibliothèque supplémentaire pour disposer de ces fonctions.

Note: Le support par défaut de l'extension overload a été ajouté en PHP 4.3.0.

Configuration à l'exécution

Cette extension ne définit aucune directive de configuration.

Types de ressources

Cette extension ne définit aucune ressource.

Constantes pré-définies

Cette extension ne définit aucune constante.

Exemples

Voici un exemple simple de fonctions utilisant overload() :

Example#1 Overload avec une classe PHP

<?php

class OO {
    var 
$a 111;
    var 
$elem = array('b' => 9'c' => 42);

    
// Fonction de callback pour la lecture de membre
    
function __get($prop_name, &$prop_value)
    {
        if (isset(
$this->elem[$prop_name])) {
            
$prop_value $this->elem[$prop_name];
            return 
true;
        } else {
            return 
false;
        }
    }

    
// Fonction de callback pour l'écriture de membre
    
function __set($prop_name$prop_value)
    {
        
$this->elem[$prop_name] = $prop_value;
        return 
true;
    }
}

// Ici, l'initiation de l'overload
overload('OO');

$o = new OO;
echo 
"\$o->a: $o->a\n"// $o->a: 111
echo "\$o->b: $o->b\n"// $o->b: 9
echo "\$o->c: $o->c\n"// $o->c: 42
echo "\$o->d: $o->d\n"// $o->d:

// ajouter une nouvelle valeur au membre $elem, en programmation OOP
$o->56;

// instantiation de la classe stdclass (elle existe par défaut en PHP 4)
// $val n'est pas overloadée!
$val = new stdclass;
$val->prop 555;

// Forcez "a" à être un tableau avec l'élément $val
// Mais _set() forcera cet élément dans le tableau $elem
$o->= array($val);
var_dump($o->a[0]->prop);

?>