J'essaye de faire un système de hooks qui permettrait de modifier le comportement d'une fonction.
Je ne vais pas rentrer dans les détails, je pense que mon code parlera de lui même et n'est pas difficile à comprendre.
En gros, je voudrais injecter du code dans ma fonction displayStaticContent() via la fonction pluginFunc()
Cela marche plus ou moins à moitié, car si l'on regarde ma fonction pluginFunc() elle devrait normalement faire un echo pour finalement stopper l’exécution de la fonction displayStaticContent() grâce a un return.
Pour le echo, pas de problème,e mais la fonction continue de s’exécuter jusqu'au bout malgré le return.
Si par contre je place le return avant le echo, plus rien ne se passe, le return stoppe bien displayStaticContent().
Y'a t'il quelquechose qui m'échappe ?
Je n'ai vraiment aucune piste...
<?php
function addHook($name, $func){
global $hooks;
$hooks[$name] = $func;
}
function callHook($name){
global $hooks;
if(isset($hooks[$name])) return ' ?>'.call_user_func($hooks[$name]).'<?php ';
}
function displayStaticContent(){
global $static;
eval(callHook('displayStaticContent'));
echo $static['content'];
}
$hooks = array();
$static = array('id' => '1', 'name' => 'Test', 'content' => '<p>Hello.</p>');
addHook('displayStaticContent', 'pluginFunc');
function pluginFunc(){
$return = "<?php echo '<h2>'.\$static['name'].'</h2>'; return; ?>";
return $return;
}
?>
<?php displayStaticContent(); ?>