Php 向引擎添加条件语句

Php 向引擎添加条件语句,php,Php,我正在尝试将使用条件语句的能力添加到我正在尝试开发的这个基本引擎中,但我不明白为什么它不起作用。有人能帮忙吗?它并没有取代文本 下面是条件语句的template.php <?php class Template { private $vars = array(); public function assign($key, $value) { $this->vars[$key] = $value; } public function

我正在尝试将使用条件语句的能力添加到我正在尝试开发的这个基本引擎中,但我不明白为什么它不起作用。有人能帮忙吗?它并没有取代文本

下面是条件语句的
template.php

<?php

class Template {
    private $vars = array();

    public function assign($key, $value) {
        $this->vars[$key] = $value;
    }

    public function render($file_name) {
        $path = $file_name . '.html';

        if (file_exists($path)) {

            $content = file_get_contents($path);

            foreach ($this->vars as $key => $value) {
                $content = preg_replace('/\{' . $key . '\}/', $value, $content);
            }

            $content = preg_replace('/\{if (.*)\}/', '<?php if ($1): ?>', $content);
            $content = preg_replace('/\{elseif (.*)\}/', '<?php elseif ($1): ?>', $content);
            $content = preg_replace('/\{else\}/', '<?php else: ?>', $content);
            $content = preg_replace('/\{\/if\}/', '<?php endif; ?>', $content);

            eval(' ?>' . $content . '<?php ');

        } else {
            exit('<h4>Engine error...</h4>');
        }
    }
}

?>

下面是html中的实现

<div class="container">
            <div id="content">
                <h3>{pagetitle}</h3>
                <hr />
                <span>My name is {username} and I am {age} years old</span>

                {if ({age}==21)}
                    21
                {elseif ({age}==22)}
                    22
                {else}
                    none
                {/if}

           </div>
</div>

{pagetitle}

我的名字是{username},今年{age}岁 {if({age}==21)} 21 {elseif({age}==22)} 22 {else} 没有一个 {/if}

它直接打印出上面的条件块,就像你内联看到的那样

我猜你需要取消所有正则表达式模式的绑定

这样做:

/\{if (.*)\}/
/\{if (.*)\}/U
将用您的替换项替换
{if
的第一个实例和
}
的最后一个实例之间的所有内容。使用模式中的
U
标志取消冻结匹配,如下所示:

/\{if (.*)\}/
/\{if (.*)\}/U

为什么使用一些现有的模板引擎或仅仅使用PHP会如此困难?@George Cummins它会将
{if}
..打印到
{/if}
@我不是在拖延,我只是想尝试制作一个all@zachstarnes-您的preg_replace语句是否有效?在每一篇文章之后重复内容,并确保它们以您期望的方式替换文本。好吧。。。我已经考虑过了。但是在解析后,
$content
中难道不会至少有一个
吗?@Lukas这就是我所想的,因为某些原因它不会起作用。@Mike Brant起作用了,但我必须将结果放在一个标记中,以供修改appear@Mike布兰特:你知道为什么它不能用
@Lukas代替它吗,可能会有一个键/值替换,因为这些都是先完成的。我只是看到了关于空白屏幕的内容,这可能让我相信问题实际上是在读取文件,或者可能有其他致命错误。