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

标签 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 找到了 {lang everything} 它将使用 $this->languagevar('hello'); 进行转换

但我不断收到错误

$template = preg_replace_callback("/\{lang\s+(.+?)\}/is", $this->languagevar('\\1'), $template);

错误消息是

preg_replace_callback(): Requires argument 2, '('\1')', to be a valid callback

在我可以使用

进行回调之前
preg_replace("/\{lang\s+(.+?)\}/ies", "\$this->languagevar('\\1')", $template);

但也许当前的 php 版本问题,它收到错误说/e 已弃用,请改用 preg_replace_callback

最佳答案

用途:

$template = preg_replace_callback("/\{lang\s+(.+?)\}/is", array($this, 'languagevar'), $template);

传递给回调函数的参数是一个匹配元素的数组,因此您必须将 languagevar 更改为以下内容:

   public function languagevar($matches){
      /// ......
      return $lang[$matches[1]];
   }

关于php - preg_replace_callback 在参数 2 处调用 $this->method ('\\1' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22227923/

相关文章:

php - Fullcalendar 使用了两次,事件显示只工作一次

php - 如何从 DOMDocument 中获取所有子节点?

php - 如何组合两个(或更多)preg_replace - PHP

PHP Preg Replace 替换数组

php - preg_replace/e 修饰符被弃用,使用数组作为模式和替换

javascript - 通过ajax方法GET将google标签管理器结果发送到php页面

php - 任何人都可以告诉我我的 CSS 的哪一部分造成了差距吗?

php - preg_replace 在 IMG 标签中提出斜杠

php - 如何替换 http ://or www with <a href. 。在 PHP 中

java - 是否有 Java 的 Matcher 类的 PHP 端口?