PHP4 dispose déjà d'une syntaxe de surcharge pour établir des mappages avec des modèles d'objets externes, tout comme Java et COM. PHP5 apporte une puissante surcharge orientée objet, permettant aux programmeurs de créer des comportements personnalisés pour accéder aux propriétés et appeler des méthodes.
La surcharge peut être effectuée via plusieurs méthodes spéciales __get, __set et __call Lorsque le moteur Zend essaie d'accéder à un membre et ne peut pas le trouver, PHP appellera ces méthodes.
Dans l'exemple de la figure 1, __get et __set remplacent tous les accès à un tableau de variables d'attribut. implémentez n'importe quel type de filtrage souhaité. Par exemple, le script peut désactiver la définition des valeurs d'attribut, commencer par un certain préfixe ou inclure un certain type de valeur.
La méthode __call illustre comment appeler une méthode non définie. , le nom de la méthode et les paramètres reçus par la méthode seront transmis à la méthode __call, et PHP transmet la valeur de __call à la méthode non définie.
Surcharge au niveau de l'utilisateur
<?php.
Surchargeur de classe
{
private $properties = array();
fonction __get($property_name)
{
if(isset($this->properties[$property_name]))
{
return($this->properties[$property_name]);
}
autre
{
retourner(NULL);
}
}
fonction __set ($property_name, $value)
{
$this->properties[$property_name] = $value ;
}
fonction __call($function_name, $args)
{
print("Invocation de $function_name()n");
print("Arguments : ");
print_r($args);
return(TRUE);
}
}
$o = new Overloader();
//invoke __set() attribue une valeur à une variable d'attribut inexistante et active __set()
$o->dynaProp = "Contenu dynamique" ;
//invoque __get() active __get()
print($o->dynaProp . "n");
//invoque __call() active __call()
$o->dynaMethod("Léon", "Zeev");
?>
Chargement automatique des classes
Lorsque vous essayez d'utiliser une classe non définie, PHP signalera une erreur fatale. La solution est d'ajouter une classe, qui peut être incluse dans un fichier. Après tout, vous savez quelle classe utiliser. Fournit une fonction de chargement automatique des classes, ce qui permet de gagner du temps de programmation. Lorsque vous essayez d'utiliser une classe que PHP n'a pas organisée, il recherchera une fonction globale __autoload. Si cette fonction existe, PHP l'appellera avec un paramètre , le. Le paramètre est le nom de la classe.
Exemple La figure 2 illustre comment __autoload est utilisé. Elle suppose que chaque fichier du répertoire courant correspond à une classe. Lorsque le script tente de générer une instance de la classe User, PHP exécutera __autoload Script Assumptions. La classe User est définie dans class_User.php Que l'appel soit en majuscule ou en minuscule, PHP renverra le nom de classe en minuscules
<
?php
.
//définir la fonction de chargement automatique
fonction __autoload($class)
{
include("class_" . ucfirst($class) . ".php");
}
//utiliser une classe qui doit être chargée automatiquement
$u = nouvel utilisateur ;
$u->name = "Léon" ;
$u->printName();
?>