Problème de mise à jour de variables

molgow

Membre expert
Club iGen
4 Janvier 2002
5 496
613
41
Suisse
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
mad.gif
mad.gif
mad.gif


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;';

 
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