李炎恢吧 关注:2,197贴子:6,215
  • 7回复贴,共1

关于李老师第二季Parser类中的ParIf方法

只看楼主收藏回复

//$str中$ccc并没有结束标记
$str = '
{if $abc}
123
{/if}
{if $ccc}
345
{if $cda}
abbb
{/if}
';
$_pattenIf = '/\{if\s+\$([\w]+)\}/';
$_pattenEndIf = '/\{\/if\}/';
$_pattenElse = '/\{else\}/';
if (preg_match($_pattenIf,$str)) {
if (preg_match($_pattenEndIf,$str)) {
$str = preg_replace($_pattenIf,"<?php if (\$this->_vars['$1']) {?>",$str);
$str = preg_replace($_pattenEndIf,"<?php } ?>",$str);
if (preg_match($_pattenElse,$str)) {
$str = preg_replace($_pattenElse,"<?php } else { ?>",$str);
}
} else {
exit('ERROR:if语句没有关闭!');
}
}
echo '<pre>';
echo $str;
//输出$str并没有报错,编译后的字符串如下
<pre>
<?php if ($this->_vars['abc']) {?>
123
<?php } ?>
<?php if ($this->_vars['ccc']) {?>
345
<?php if ($this->_vars['cda']) {?>
abbb
<?php } ?>
//不知道如何解决这个问题,有知道的告诉一下哈


IP属地:重庆1楼2016-02-22 08:45回复
    这个就是一个简单的模板引擎,通过模板解析类将tpl文件解析成php文件


    来自Android客户端3楼2016-02-22 21:40
    回复
      缺少{/if}


      来自Android客户端4楼2016-02-22 21:43
      收起回复
        楼主也可以使用smarty模板引擎


        来自Android客户端5楼2016-02-27 00:42
        回复