ugrás a tartalomhoz

preg_replace_callback // Type 2: Static class method call

toxin · 2006. Jún. 28. (Sze), 13.06
kérdés
  1. <?php  
  2. $sampleText = 'aaa 123 bbb';  
  3.   
  4. class fooFind{  
  5.     function fooFind($text){  
  6.         $this->origText = $text;  
  7.         preg_replace_callback('/[\d]+/',array('fooFind','printFind'),$this->origText);  
  8.     }  
  9.   
  10.     function printFind($matchedText){  
  11.         echo 'Eredeti:'.$this->origText."\n";  
  12.         echo 'Találat:'.$matchedText[0]."\n";  
  13.     }  
  14. }  
  15.   
  16. $myFoo = new fooFind($sampleText);  
  17. ?>  
a printFind callback függvényben/metódusban elérhető-e vhogy az eredeti a hívó objektum ill objattrib (esetünkben a $this->origText), vagy marad az eval-os megoldás ?
  1. <?php  
  2. $sampleText = 'aaa 123 bbb';  
  3.   
  4. class fooFind{  
  5.     function fooFind($text){  
  6.         $this->origText = $text;  
  7.         preg_replace('/[\d]+/e','$this->printFind(\'\\0\')',$this->origText);  
  8.     }  
  9.   
  10.     function printFind($matchedText){  
  11.         echo 'Eredeti:'.$this->origText."\n";  
  12.         echo 'Találat:'.$matchedText."\n";  
  13.     }  
  14. }  
  15.   
  16. $myFoo = new fooFind($sampleText);  
  17. ?>  
kössz a választ
 
1

objektum

bbalint · 2006. Jún. 29. (Cs), 10.54
ööö mi volna, ha a osztálymetódus helyett a létrejött objektum ($this) metódusát hívnád meg (ahogy a kódon is látszik, hogy ilyesmit akarsz):
a preg_replace_callback()-nek inkább add meg az array($this, 'printFind') függvényt/metódust.
2

köszi

toxin · 2006. Jún. 29. (Cs), 11.56
nos valóban [clap] , de egyenlőre mégis marad az eval, lévén azzal tetszőleges számú paraméter, még referencia is átadtható, és nem akarom felváltva használni a kódban a kettőt, még egyszer köszönöm :)