嗯...我有一个类,尝试使用preg_replace_callback创建模板类,但我不知道参数2是如何写的
class template {
public function parse_template($newtpl, $cachetpl){
......
$template = preg_replace("/\<\!\-\-\{(.+?)\}\-\-\>/s", "{\\1}", $template);
$template = preg_replace_callback("/\{lang\s+(.+?)\}/is", $this->languagevar('\\1'), $template);
......
}
public function languagevar($param1){
......
return $lang[$param1];
......
}
}
这是怎么回事?
在我的html(模板)文件中,有这样的{lang hello},而parse_template找到了它将使用$ this-&gt; languagevar('hello')转换的{lang anything};
但我一直在
收到错误$template = preg_replace_callback("/\{lang\s+(.+?)\}/is", $this->languagevar('\\1'), $template);
错误消息是
preg_replace_callback():要求参数2,'('\ 1')'有效 回调
之前我可以使用
进行回调preg_replace("/\{lang\s+(.+?)\}/ies", "\$this->languagevar('\\1')", $template);
但也许是当前的php版本问题,它有错误说/ e已弃用,请改用preg_replace_callback
答案 0 :(得分:2)
使用:
$template = preg_replace_callback("/\{lang\s+(.+?)\}/is", array($this, 'languagevar'), $template);
传递给回调函数的参数是匹配元素的数组,因此您必须将languagevar
更改为以下内容:
public function languagevar($matches){
/// ......
return $lang[$matches[1]];
}
答案 1 :(得分:0)
您需要提供有效的callback作为preg_replace_callback
的第二个参数。
在您的情况下,array($this, 'languagevar')
。
另请注意,您无法像您尝试的那样将捕获的组明确传递给回调方法。该方法将接收所有匹配元素的数组。