preg_replace_callback()问题

时间:2011-07-04 18:37:01

标签: php regex

我正在使用preg_replace_callback来查找和替换带有实时链接的文本链接:

http://www.example.com

<a href='http://www.example.com'>www.example.com</a>

我提供函数的回调函数在另一个类中,所以当我尝试:

return preg_replace_callback($pattern, "Utilities::LinksCallback", $input);

我收到错误声称该功能不存在。有什么想法吗?

3 个答案:

答案 0 :(得分:20)

在PHP中使用类方法作为回调时,必须使用array形式的回调。也就是说,您创建一个数组,其第一个元素是类(如果方法是静态的)或类的实例(如果不是),第二个元素是要调用的函数。 E.g。

class A {
     public function cb_regular() {}
     public static function cb_static() {}
}

$inst = new A;

preg_replace_callback(..., array($inst, 'cb_regular'), ...);

preg_replace_callback(..., array('A', 'cb_static'), ...);

您正在调用的函数当然必须在您使用回调的范围内可见。

有关有效回调的详情,请参阅http://php.net/manual/en/language.pseudo-types.php

N.B。阅读那里,从5.2.3开始,你可以使用你的方法,只要回调函数是静态的。

答案 1 :(得分:4)

你可以这样做:

return preg_replace_callback($pattern, array("Utilities", "LinksCallback"), $input)

参考:http://php.net/callback

答案 2 :(得分:0)

您也可以使用T-Regx library

pattern($pattern)->replace($input)->callback([Utilities::class, 'LinksCallback']);