Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

preg_replace_callback() en una clase

Estas en el tema de preg_replace_callback() en una clase en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Amigos : estoy haciendo una clase de reemplazo de palabras y tengo un problema con preg_replace_callback(), ya que me dice que "requiere una funcion callback ...
  #1 (permalink)  
Antiguo 14/07/2009, 17:26
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 9 meses
Puntos: 292
Exclamación preg_replace_callback() en una clase

Amigos: estoy haciendo una clase de reemplazo de palabras y tengo un problema con preg_replace_callback(), ya que me dice que "requiere una funcion callback valida" y me temo sea un problema de pasaje de argumentos.

Cita:
Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, '', to be a valid callback in C:\xampp\htdocs\parser\clases\str_replace.class.ph p on line 45
Código PHP:
<?
class replacer {

  private 
$subject
  private 
$insideTags=TRUE;
  private 
$dictiorary;
  private 
$asterix=FALSE;
  
  private 
$search;      
  private 
$replacement;

  function 
setSubject ($subject){
    
$this->subject $subject;   
  }  

  function 
setSearch ($search){
    
$this->search $search;
  }
  
  function 
setReplacements (array $replacement){ // voy a usar esta
    
$this->dictiorary[$this->search]=$replacement;
  }
  
  function 
setReplacement ($replacement){ 
    
$this->dictiorary[$this->search][]=$replacement;
  }
    
  function 
setAsterix(){
    
$this->asterix=TRUE;
  }  
    
  private function 
take_one($arreglo){ 
    return(
$arreglo[array_rand($arreglo)]);
  }

  function 
replace ($str){  // metodo que da inicio a los reemplazos  
  
    
$str strtolower($str); 
    
$this->setSubject($str);   

    
// ordeno el diccionario
    
sort($this->dictiorary); 
    
$this->dictiorary array_reverse ($this->dictiorary);
    
    return 
preg_replace_callback("|[ \[.,;(]{0,}([\wáéíóúñÑ]+)[ \].,;)]{0,}|is","{$this->callback}",$str); // aisla palabras con delimitadores varios
  
}    

  private function 
callback ($matches){  // recibe y envia a procesar palabras individuales
 
    
$delimitada $matches[0];
    
$word $matches[1];
   
    
// algoritmo de reemplazo           ////////
    
$wordAfer word_replacer ($word);  
    if (
$wordAfer==""$wordAfer $word;
    
////////////////////////////////////////////
  
    
return str_replace ($word,$wordAfer,$delimitada);
  }
  
  private function 
word_replacer ($str){  
   
   
// si no hubiera reemplazo, reemplazo por ****
     
    
$out='';      
    if (
array_key_exists($str,$this->dictiorary)){
      
$out =  take_one ($this->dictiorary[$str]);        
    }
    
    if (
$this->asterix){
      
$out=str_repeat('*',strlen($str));
    }  
    return (
$out);     
  }    
    
   
# fin de clase

   
//  $a = array_merge($more,$a);  
 
?>
y la uso asi:

Código PHP:
<?php
 
Include "str_replace.class.php";

 
$str "El mundo de los problemas";

 
$todo   file_get_contents ("../reemplazos.txt");
 
$lineas   preg_split("/[\r\n]+/",$todo); //  lineas
 
 
$reemplazo = new replacer();
 
$reemplazo->setAsterix();
 
 foreach (
$lineas as $linea){      
   
$words = (explode (',',$linea));
   
$a $words[0];   // palabra a buscar
 
   
$reemplazo->setSearch($a);
 
   
$reemplazos = array();
   for (
$i=1;$i<count($words);$i++){
     
$array_reemplazos[]= $words[$i]; // reemplazos
   
}     
   
   
$reemplazo->setReplacement$array_reemplazos);
    
 }     
    
   echo 
$reemplazo->replace($str);
  
 
?>
y un ejemplo de reeemplazos.txt seria:

Cita:
mundo,planeta
problemas,dificultades,dolores de cabeza
La linea problematica es la que dice:

Código PHP:
return preg_replace_callback("|[ \[.,;(]{0,}([\wáéíóúñÑ]+)[ \].,;)]{0,}|is","{$this->callback}",$str); 
A ver si me ayudan

[ GRACIAS ]
__________________
Salu2!
  #2 (permalink)  
Antiguo 14/07/2009, 18:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 7 meses
Puntos: 2135
Respuesta: preg_replace_callback() en una clase

Como te dice necesitas un tipo callback valido, si ves el Manual puedes ver que para especificar un callback de tu clase debes de pasarlo así:
Código php:
Ver original
  1. array($this, "callback")

Saludos.
  #3 (permalink)  
Antiguo 14/07/2009, 18:08
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 9 meses
Puntos: 292
Respuesta: preg_replace_callback() en una clase

GatorV: funcionó, muchas gracias!

lástima que no entiendo porque le debo pasar ese arreglo con el objeto y la funcion
__________________
Salu2!
  #4 (permalink)  
Antiguo 14/07/2009, 18:10
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 7 meses
Puntos: 2135
Respuesta: preg_replace_callback() en una clase

En el Manual viene perfectamente explicado: http://www.php.net/manual/en/languag...types.callback

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:15.