Appel de méthode d’objet
En Php5, on peut récupérer les appels de méthodes et traiter les informations d’une façon différente grâce à la méthode __call() qui s’occupera de gérer les appels aux fonctions inexistantes.
Exemple avec __call()
<?php
class Pizzeria {
private $pizzaCounter = 0;
private $pizzaStorage = array();
public function __call($name, $args) {
// Si la méthode appelée s'appelle 'modifyPizza'
if( $name == 'modifyPizza' ){
$argsCount = count( $args );
// Si il y a un argument passé à la fonction
if( $argsCount == 1 ){
// On va ajouter une pizza
return call_user_func_array(array(&$this, 'addPizza'), $args);
// Si il y'en a deux
} else if( $argsCount == 2 ){
// On va modifier le nom d'une pizza
return call_user_func_array(array(&$this, 'modifyPizzaName'), $args);
}
}
}
public function addPizza($name){
$this -> pizzaStorage[$name] = (int)$this -> pizzaStorage[$name] + 1;
}
public function modifyPizzaName($oldName, $newName){
// On récupère le nombre de pizza anciennement nommée oldName
$pizzaStock = (int)$this -> pizzaStorage[$oldName];
// On supprime l'entrée correspondante
unset($this -> pizzaStorage[$oldName]);
// On créé la nouvelle entrée
$this -> pizzaStorage[$newName] = $pizzaStock;
}
}
$pizzeria = new Pizzeria();
$pizzeria -> modifyPizza('Pizza aux 4 fromages'); // on créé un stock de 1 pour les "Pizza aux 4 fromages"
$pizzeria -> modifyPizza('Pissaadiè'); // on créé un stock de 1 pour les "Pissaadiè"
// Mais on a fait une faute on décide de changer le nom
$pizzeria -> modifyPizza('Pissaadiè', 'Pissaladière'); // on change le nom des "Pissaadiè" en "Pissaladière"
?>
Surchage de getter et setter
De la même manière il est possible de surcharger les getters et setters d’une classe par la définition des méthodes __get() et __set() qui vont automatiquement attraper les fonctions get**** et set**** si elles n’existent pas. Ensuite en jouant sur le nom de la fonction appelée ou le nombre d’argument, on peut facilement créer des profile de fonction différent.
La surcharge de méthode prend un aspect différent des autres langages et s’affiche plus comme étant une liste de méthode de substitution et non de réel surcharge.
Le gestionnaire d’erreur de PHP
Il est possible également de redéfinir un gestionnaire en php et de récupérer les erreurs liés à un appel de fonction pour effectuer un autre traitement puis de continuer le reste de l’exécution du script.
Ceci sera plus détaillé dans un article sur les gestions d’erreurs en PHP


