par
titerm » 06 févr. 2008, 14:15
La magique __call n'est appelée que lorsque on appelle une fonction non connue, donc, pour pouvoir faire ce que tu souhaites, il faudrait non pas dérivé une classe mère mais dériver la classe X vers une Xlog qui ferait office de wrapper et qui te permettrai d'intercepter tout appel a la class X avant de transferer l'appel
class toto {
function f () {
echo 'f';
}
}
class totoLog {
function __call($nom, $args) {
echo 'before f()';
call_user_func_array(array('parent',$nom), $args);
echo 'after f()';
}
}
Néanmoins, la solution la plus adapté pour faire ce que tu souhaites serait la programmation orienté aspect. Je sais qu'il y a eu plusieurs tentatives d'approche de la POA en php mais je n'avais rien vu de véritablement complet à l'époque ou je m'y était intérressé (il y a 2 ou 3 ans ). Peut être que depuis, les choses ont évoluées.
La magique __call n'est appelée que lorsque on appelle une fonction non connue, donc, pour pouvoir faire ce que tu souhaites, il faudrait non pas dérivé une classe mère mais dériver la classe X vers une Xlog qui ferait office de wrapper et qui te permettrai d'intercepter tout appel a la class X avant de transferer l'appel
[php]
class toto {
function f () {
echo 'f';
}
}
class totoLog {
function __call($nom, $args) {
echo 'before f()';
call_user_func_array(array('parent',$nom), $args);
echo 'after f()';
}
}
[/php]
Néanmoins, la solution la plus adapté pour faire ce que tu souhaites serait la programmation orienté aspect. Je sais qu'il y a eu plusieurs tentatives d'approche de la POA en php mais je n'avais rien vu de véritablement complet à l'époque ou je m'y était intérressé (il y a 2 ou 3 ans ). Peut être que depuis, les choses ont évoluées.