Petit problème preg_replace_callback appellé deux fois..

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: Lun Juil 11, 2005 11:47

Petit problème preg_replace_callback appellé deux fois..

Message le Mer Avr 26, 2006 17:33

Helo !

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

voila grossièrement le code :
Code: Tout sélectionner
  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... :(


Xele
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 109
Inscription: Dim Juil 10, 2005 10:31

Message le Mer Avr 26, 2006 17:51

Code: Tout sélectionner
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

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: Lun Juil 11, 2005 11:47

Message le Mer Avr 26, 2006 17:57

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.


Xele
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 109
Inscription: Dim Juil 10, 2005 10:31

Message le Mer Avr 26, 2006 18:14

Y'a ptetre la réponse que tu cherche dans les commentaires de la doc php :

Code: Tout sélectionner
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: Tout sélectionner
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

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: Lun Juil 11, 2005 11:47

Message le Mer Avr 26, 2006 19:35

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.


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : JotSpot

  • Analyse du référencement Google
    Cet outil vous donne un petit résumé de l'état de référencement de votre site dans Google.
  • Indice de densité
    Cet outil vous permet de calculer l'indice de densité d'un mot-clé d'une page web. Il est calculé à la fois pour la balise TITLE, la balise META description et l'ensemble du texte de la page.
  • Déterminer l'âge d'un site
    Cet outil vous permet de connaître une estimation de l'ancienneté d'un site : il fournit la date à laquelle Google l'a indexé la première fois (et la même chose pour archive.org).
  • Analyse de similarité textuelle
    Cet outil vous permet de calculer la similarité entre 2 pages web. L'algorithme utilisé repose sur l'analyse des occurrences des mots (mais pas sur leur positionnement dans les pages). Google utilise cette notion à certains endroits dans son algorithme, mais de façon bien plus évoluée que ce petit outil... Avoir des pages trop similaires peut entraîner des problèmes d'indexation... Cet outil vous permettra peut-être de résoudre certains problèmes de contenus dupliqués.


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités