在PHP模板系统中实现条件的最佳方法?

时间:2009-03-29 19:10:11

标签: php regex string templates

我正在为自定义CMS /新闻系统创建一个非常简单的PHP模板系统。每篇文章都有介绍和完整内容(如果适用)。我希望以这种形式为条件:

{continue}click to continue{/continue}

因此,如果可以继续,将显示“单击以继续”文本,否则,不显示整个字符串。到目前为止,它的工作原理如下:如果我们可以继续,请删除{continue}标记;否则,删除整个事情。

我目前正在使用preg_match_all来匹配第二种情况下的字符串。删除匹配文本的最佳功能是什么?一个简单的str_replace,还是别的什么?

或者有更好的方法来实现这个整体吗?

3 个答案:

答案 0 :(得分:5)

为什么不使用preg_replace_callback

具体做法是:

preg_replace_callback('!\{continue\}(.*)\{/continue\}!Us', 'replace_continue', $html);

function replace_continue($matches) {
  if (/* can continue */) {
    return $matches[1];
  } else {
    return '';
  }
}

我发现preg_replace_callback非常有用。

答案 1 :(得分:2)

对不起我知道人们一直在嘲笑这种答案,但只是使用Smarty。它简单,稳定,巧妙,免费,小巧便宜。花一个小时学习如何使用它,你永远不会回头。

转到www.smarty.net

答案 2 :(得分:1)

对于PHP模板系统,正确的方法是解析模板(使用状态机或至少preg_split),从中生成PHP代码,然后仅使用该PHP代码。然后,您将能够将正常if用于条件表达式。

正则表达式不是实现模板的好主意。 PITA将处理嵌套并在基本情况之外强制执行适当的语法。性能将非常差(您必须小心不要创建回溯表达式,即使这样,您最终也会多次扫描和复制模板的KB)。