gpt4 book ai didi

php - 有没有办法在preg_replace_callback 回调函数中传递另一个参数?

转载 作者:可可西里 更新时间:2023-10-31 23:02:53 26 4
gpt4 key购买 nike

嗯,伙计们,我真的希望我的英语很好,足以解释我需要什么。

让我们以代码的示例(这只是一个示例!)为例:

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();

因此,php 手册说要在 preg_replace_callback() 中使用类方法作为回调,该方法必须是抽象的。

我需要在回调函数中传递一个先前初始化对象的实例(在示例中,是 Something 类的一个实例)。

我尝试使用 call_user_func(),但没有用(因为这样我错过了 matches 参数)。

有没有办法做到这一点,或者让我分开这个过程(在 preg_match_all 之前做,为每个匹配检索替换值,然后是一个简单的 preg_replace )?

编辑:作为旁注,在 tom haigh 回答之前,我使用了这个解决方法(在示例中,这是 Replace 方法):

$has_dynamic = preg_match_all($this->reg, $this->string, $dynamic);
if($has_dynamic){
/*
* The 'usefull' subset of my regexp is the third, so $dynamic[2]
*/
foreach($dynamic[2] AS $key => $value){
$dynamic['replaces'][$key] = $this->Bar($value);
}
/*
* ..but i need to replace the complete subset, so $dynamic[0]
*/
return str_replace($dynamic[0], $dynamic['replaces'], $this->string);
}else{
return $this->string;
}

希望能帮到别人。

最佳答案

很难将参数传递给回调,但不是这样:

return preg_replace_callback($this->reg, 'Foo::Bar', $this->string);

您可以使 Bar() 不是静态的,并使用它:

return preg_replace_callback($this->reg, array($this, 'Bar'), $this->string);

那么回调函数就能看到$this

参见 Pseudo-types and variables 中的“回调”

同样在 PHP >=5.3 中你可以使用 anonymous functions/closures将其他数据传递给回调函数。

关于php - 有没有办法在preg_replace_callback 回调函数中传递另一个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2680982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com