Is there a way to pass another parameter in the preg_replace_callback callback function?

Posted by DaNieL on Stack Overflow See other posts from Stack Overflow or by DaNieL
Published on 2010-04-21T07:19:49Z Indexed on 2010/04/21 7:23 UTC
Read the original article Hit count: 379

mmmh guys, i really hope my english is good enaught to explain what i need.

Lets take this example (that is just an example!) of code:

class Something(){
    public function Lower($string){
        return strtolower($string);
    }
}
class Foo{
    public $something;
    public $reg;
    public $string;
    public function __construct($reg, $string, $something){
        $this->something = $something;
        $this->reg = $reg;
        $this->string = $string;
    }
    public function Replace(){
        return preg_replace_callback($this->reg, 'Foo::Bar', $this->string);
    }
    public static function Bar($matches){
        /*
        * [...]
        * do something with $matches and create the $output variable
        * [...]
        */

        /*
        * I know is really useless in this example, but i need to have an istance to an object here
        * (in this example, the Something object, but can be something else!)
        */
        return $this->something->Lower($output);
    }
}
$s = new Something();
$foo = new Foo($myregexp, $mystring, $s);
$content = $foo->Replace();

So, the php manual say that to use a class method as callback in preg_replace_callback(), the method must be abstract.

I need to pass an instance of a previuosly initialized object (in the example, an instance of the Something class) at the callback function.

I tryed to use call_user_func(), but doesnt work (becose in this way i miss the matches parameter).

Is there a way to do that, or have i to separate the process (doing before preg_match_all, for each match retrieve the replace value, and then a simple preg_replace)?

© Stack Overflow or respective owner

Related posts about php

Related posts about preg-replace