preg_replace_callback在参数2处调用$ this->方法('\\ 1')

时间:2014-03-06 14:50:22

标签: php preg-replace preg-replace-callback

嗯...我有一个类,尝试使用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

2 个答案:

答案 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')

另请注意,您无法像您尝试的那样将捕获的组明确传递给回调方法。该方法将接收所有匹配元素的数组。