karamilo | 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 :
- <?
- class Template
- {
- function replace($data) // remplace les donnees templates par du php
- {
- $data = strtr($data, array("'" => "\'" ));
- $search = array(
- "#(.*?)<(if|elseif|foreach) cond=\\\\'(.*?)\\\\'>(.*?)</(if|elseif|foreach)>(.*)#Ssi",
- "#(.*?)<else>(.*?)</else>(.*)#Ssi" );
- $data = preg_replace_callback($search,'fct', $data);
- $data = $this->repvar($data);
- $data = "<?\n".$this->set_session."include_once '".$this->dir['lang'].$this->set_lang."';\necho '\n".$data."\n';\n?>";
- return $data;
- }
- }
- function fct($texte)
- {
- if (isset($texte[4]))
- {
- $texte2 = $texte[1].'\';'.$texte[2].' ('.$texte[3].'){echo \''.$texte[4].'\';}echo \''.$texte[6];
- if (strpos($texte2,'<'.$texte[2]." cond=\\'" ) < strpos($texte2,'</'.$texte[2].'>'))
- {
- $search = "#(.*?)<(if|elseif|foreach) cond=\\\\'(.*?)\\\\'>(.*?)</(if|elseif|foreach)>(.*)#Ssi";
- return preg_replace_callback($search,'fct', $texte2);
- }
- else
- {
- return $texte2;
- }
- }
- else
- {
- $texte2 = $texte[1].'\';else {echo \''.$texte[2].'\';}echo \''.$texte[3];
- if (strpos($texte2,'<else>') < strpos($texte2,'</else>'))
- {
- $search = array(
- "#(.*?)<(.*?) cond=\\\\'(.*?)\\\\'>(.*?)</(.*?)>(.*)#Ssi",
- "#(.*?)<else>(.*?)</else>(.*)#Ssi" );
- return preg_replace_callback($search,'fct', $texte2);
- }
- else
- {
- return $texte2;
- }
- }
- }
- ?>
|
Message édité par karamilo le 25-11-2003 à 16:27:40
|