我有以下代码:
$message = preg_replace($pattern, "$this->get_bitly_url('$0')", $message);
function get_bitly_url($url) {
// do stuff to get the url
return $newurl;
}
我想将匹配替换为同一类中函数get_bitly_url()
的返回值。
但是我收到了以下错误:
Notice: Undefined property: MyClass::$get_bitly_url in /path/to/MyClass.php on line 43
所以我改为使用preg_replace:
$message = preg_replace($pattern, "self::get_bitly_url('$0')", $message);
这有效,但我想知道这是否是正确的方法。
所以......是吗?
答案 0 :(得分:2)
不,绝对不是:)。使用preg_replace_callback:http://php.net/manual/en/function.preg-replace-callback.php。
答案 1 :(得分:1)
使用单引号,否则PHP会过早地评估$this->
:
$message = preg_replace($pattern, '$this->get_bitly_url("$0")',
您需要在此处将包含表达式的字符串传递给preg_replace
。但是,如果它是双引号,则在之前将 评估为 字符串表达式,它将成为函数参数。
答案 2 :(得分:1)
假设您使用的是PHP5.3或更高版本,可以使用:
$myObject = $this;
$message = preg_replace_callback($pattern, function($matches) use($myObject) {
return $myObject->get_bitly_url($matches[0]);
}, $message);
使用以前的版本,您可以在其他地方定义函数,并将函数名称作为字符串传递给preg_replace_callback,但速度较慢。