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: 384
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