Petit problème preg_replace_callback appellé deux fois..

WRInaute accro
Helo !

J'ai un soucis que je n'airrive pas à résoudre.

voila grossièrement le code :
Code:
  function _la($texte)
  {
    function test($val)
    {
      return '<LA>'.$val[1].'</LA>';
    }
    return preg_replace_callback('`\[LA\](.+)\[/LA\]`iU', 'test', $texte);
  }

Si j'appel une seule fois la fonction function _la($texte), je n'ai aucun soucis. Seulement si je l'appel deux fois ou plus j'ai un problème, car il ne peut redéfinir la fonction test($val)..

Message :
Fatal error: Cannot redeclare test() (previously declared in d:...\test.php:417) in d:...\test.php on line 417

Avez vous une idée de comment résoudre la chose ? :?
Je ne vois vraiment plus... :(
 
WRInaute discret
Code:
function test($val) 
{ 
 return '<LA>'.$val[1].'</LA>'; 
} 

function _la($texte) 
  { 
     return preg_replace_callback('`\[LA\](.+)\[/LA\]`iU', 'test', $texte); 
  }

Ca devrais très bien marcher comme ca
 
WRInaute accro
Oui en effet cela fonctionne, dans un déroulement procédurale.
Moi j'ai cela dans une class et lorsque je sort la fonction test il ne me la reconnait pas (normal) et lorsque je rajoute le $this->test ça ne prend pas dans le preg_replace_callback.

En revanche si je sort ma fonction $test de la class cela fonctionne, mais ce n'est pas correcte comme écriture.

En fait le seule problème est que je ne peux que lui donner comme argument qu'une fonction "simple" et pas avec un $this->...

Si d'autres idées sur ce problème épineux.
 
WRInaute discret
Y'a ptetre la réponse que tu cherche dans les commentaires de la doc php :

Code:
Also, if you want to use a *static* class method for the callback function, you can refer to it like this:
   preg_replace_callback(pattern, array('ClassName', 'methodName'), subject)

In PHP5, from within the class:
   preg_replace_callback(pattern, array('self', 'methodName'), subject)

ou bien

Code:
Instead of using preg_replace_callback() you could use preg_replace() like below:

<?php

  // ** Simple function: **
     function my_function( $my_param_one, $my_param_two ) {
             // ...
     }
     preg_replace( "! \{(.+)-(.+)\} !e", "my_function('\\1', '\\2')", $input_string );

  // ** Class: **
   class my_class {

           function my_class() {
             preg_replace( "! \{(.+)-(.+)\} !e", "\$this->my_function('\\1', '\\2')", $input_string );
           }

           function my_function( $my_param_one, $my_param_two ) {
             // ...
           }
   }

?>

Enfin ca se passe par la : http://fr3.php.net/preg_replace_callback

Edit : par la aussi, merci google (recherche : preg_replace_callback class) : http://www.webmasterworld.com/forum88/7623.htm
 
WRInaute accro
Yesssssssss!!!!!!!

Super !!! Je te remercie beaucoup !

J'étais sur la page de la doc. de PHP, mais il est vrai que je n'ai pas cherché en profondeur...à mes tords d'ailleurs...

Mais ils auraient quand même pu l'indiquer en haut tout de même.
En tout cas merci je me casse la tête depuis un moment !

Pour info au passage: le preg_replace avec l'option e c'est déconseillé.
C'est moins bien géré et plus lent.
 
Discussions similaires
Haut