LXXVIII. 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 supporte cet 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 et modifier un membre, et appeler une méthode. De cette manière, l'overloading assure un contrôle sur les fonctions appelées. A l'intérieur de ces méthodes, l'overloading est désactivé, pour que vous puissiez accéder à l'objet.

Avertissement

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.

Pré-requis

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

Installation

In order to use these functions, you must compile PHP with the --enable-overload option. Starting with PHP 4.3.0 this extension is enabled by default. You can disable overload support with --disable--overload.

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

Note : Builtin support for overload is available with 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édefinies

Cette extension ne définit aucune constante.

Exemples

Voici un exemple simple de fonctions utilisant overload() :

Exemple 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'&eacute;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;
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:

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

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

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

?>

Avertissement

Comme c'est une extension expérimentale, tout ne fonctionne pas encore. Il n'y a pas de support pour __call() actuellement, et nouvs ne pouvez overloader que des accesseurs. Vous ne pouvez pas appeler les fonctions d'overload de la classe, et __set() ne fonctionne que pour un seul niveau d'accesseur.

Table des matières
overload -- Active la couche de contrôle des membres et méthodes