Administrateur PHPfrance |
3131 Messages
13 juin 2007, 11:46
Il y a une méthode magique __call en PHP5.
Mettons que tu aies une classe avec une série de méthodes publiques que tu veuilles "intercepter", le moyen le plus sûr et efficace c'est de les renommer, les passer en private, et ne pouvoir les appeler que via __call.
class MaClasse {
public function maMethode($arg) {
// ... code de ma méthode
}
}
Devient
class MaClasse {
private function ___maMethode($arg) {
// ... code de ma méthode
}
public function __call($func, $args) { // wrapper pour les fonctions "___*"
if (method_exists($this, "___$func")) {
// ... code à effectuer avant chaque appel de méthode
return call_user_func_array(array($this,"___$func"), $args);
}
}
Exemple
class Afficheur {
private function ___affiche($texte) {
echo $arg;
}
public function __call($func, $args) { // wrapper pour les fonctions "___*"
if (method_exists($this, "___$func")) {
echo "$func interceptée... ";
return call_user_func_array(array($this,"___$func"), $args);
}
}
}
$afficheur = new Afficheur;
$afficheur->affiche("Coucou !");
affiche interceptée... Coucou !