Class et callback : probleme de fonction

Class et callback : probleme de fonction - PHP - Programmation

Marsh Posté le 25-11-2003 à 16:16:31    

salut
j'ai cree une classe qui utilise un preg_replace_callback et qui appelle donc une fonction nommée 'fct'. Le probleme est que je n'arrive pas a integrer cette fonction dans la classe car le callback me refoule :
Warning: preg_replace_callback() requires argument 2, '$this->fct', to be a valid callback in /home/karamilo/public_html/Templates/tpl2.class.php on line 45
 
preg_replace_callback a bien l'argument entre '' et pas entre "".  
 
Etait il possible de faire un callback sur une fonction de la classe ? j'ai aussi essaye class::fonction et create_function mais ca ne fonctionne pas et la fonction est trop longue pour create_function :|
 
Le code est un morceau de la classe de templates.
 
 

Code :
  1. <?
  2. class Template
  3. {
  4. function replace($data) // remplace les donnees templates par du php
  5. {
  6. $data = strtr($data, array("'" => "\'" ));
  7. $search = array(
  8. "#(.*?)<(if|elseif|foreach) cond=\\\\'(.*?)\\\\'>(.*?)</(if|elseif|foreach)>(.*)#Ssi",
  9. "#(.*?)<else>(.*?)</else>(.*)#Ssi" );
  10. $data = preg_replace_callback($search,'fct', $data);
  11. $data = $this->repvar($data);
  12. $data = "<?\n".$this->set_session."include_once '".$this->dir['lang'].$this->set_lang."';\necho '\n".$data."\n';\n?>";
  13. return $data;
  14. }
  15. }
  16. function fct($texte)
  17. {
  18. if (isset($texte[4]))
  19. {
  20. $texte2 = $texte[1].'\';'.$texte[2].' ('.$texte[3].'){echo \''.$texte[4].'\';}echo \''.$texte[6];
  21.  if (strpos($texte2,'<'.$texte[2]." cond=\\'" ) < strpos($texte2,'</'.$texte[2].'>'))
  22.  {
  23.  $search = "#(.*?)<(if|elseif|foreach) cond=\\\\'(.*?)\\\\'>(.*?)</(if|elseif|foreach)>(.*)#Ssi";
  24.  return preg_replace_callback($search,'fct', $texte2);
  25.  }
  26.  else
  27.  {
  28.  return $texte2;
  29.  }
  30. }
  31. else
  32. {
  33. $texte2 = $texte[1].'\';else {echo \''.$texte[2].'\';}echo \''.$texte[3];
  34.  if (strpos($texte2,'<else>') < strpos($texte2,'</else>'))
  35.  {
  36.  $search = array(
  37.  "#(.*?)<(.*?) cond=\\\\'(.*?)\\\\'>(.*?)</(.*?)>(.*)#Ssi",
  38.  "#(.*?)<else>(.*?)</else>(.*)#Ssi" );
  39.  return preg_replace_callback($search,'fct', $texte2);
  40.  }
  41.  else
  42.  {
  43.  return $texte2;
  44.  }
  45. }
  46. }
  47. ?>


Message édité par karamilo le 25-11-2003 à 16:27:40
Reply

Marsh Posté le 25-11-2003 à 16:16:31   

Reply

Marsh Posté le 25-11-2003 à 16:22:44    

donne le code...

Reply

Marsh Posté le 25-11-2003 à 16:46:06    

desole de pas l'avoir mis directement ;)
 
edit au dessus.

Reply

Marsh Posté le 25-11-2003 à 18:22:33    

j'ai trouvé, il faut mettre :  
array('nomdelaclasse','nomdelafonction') au lieu de 'nomdelafonction' en argument callback.
preg_replace_callback($search, array('Template','fct'), $texte)
 
En php5, on pourra faire une sorte de $this :
preg_replace_callback($search, array('self', 'fct'), $texte)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed