Problème de mise à jour de variables

molgow

Vétéran
Club MacG
4 Janvier 2002
5 493
612
37
Suisse
www.monts-chevreuils.ch
Regardez le code en bas de la page (désolé je voulais le mettre en haut, mais UBB est buggué)

Le problème c'est que lorsque le script passe par la méthode handle_tag, il ne met pas à jour la variable nombre puisque à la fin du script lorsque je fais un echo $inter->nombre, il m'affiche toujours 0.
Merci pour votre aide.. ce truc commence à me faire devenir fou


PS: Ne me dites pas que je pourrais faire bien plus simple, je le sais. N'oubliez pas que ceci est juste un exemple très simplifié pour montrer mon problème.


<font class="small">Code:</font><hr /><pre>&lt;?php

class Interpreter
{
var $texte;
var $nombre;

function Interpreter($texte)
{
$this-&gt;texte = $texte;
$this-&gt;nombre = 0;
}

function decode()
{
$this-&gt;texte = preg_replace_callback("#\[tag\](.*?)\[/tag\]#si", array($this, 'handle_tag'), $this-&gt;texte);
}

function handle_tag($matches)
{
$this-&gt;nombre++;
echo 'passage dans la fonction handle_tag(), $this-&gt;nombre = ' . $this-&gt;nombre . '&lt;br&gt;';
return "&lt;tag&gt;".$matches[1]."&lt;/tag&gt;";
}

}

$inter = new Interpreter("[tag]toto[/tag] \n [tag]titi[/tag]");
$inter-&gt;decode();
echo '$inter-&gt;nombre = ' . $inter-&gt;texte . '&lt;br&gt;';
echo '$inter-&gt;nombre = ' . $inter-&gt;nombre . '&lt;br&gt;';

 

leo

Membre confirmé
22 Mars 2000
135
0
Comme vu dans la doc de ton preg_replace_callback, preg_replace_callback

If you want to be able to change variables of the class in the callback function, you have to use preg_replace_callback(pattern, array(&amp;$this, 'method_name'), subject)
Probably very obvious, but it kept me busy for a while...
Donc:

Bloc de code:
 preg_replace_callback("#\[tag\](.*?)\[/tag\]#si", array(&amp;$this, 'handle_tag'), $this-&gt;texte)

et hop!

-l