0

我正在尝试将使用条件语句的能力添加到我正在尝试开发的这个基本引擎中,但我无法弄清楚它为什么不起作用。任何人都可以帮忙吗?它不是替换文本。

这是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>

当您看到它内联时,它会从字面上打印出上面的条件块

4

1 回答 1

1

我猜你需要让你所有的正则表达式模式都变得不贪婪。

做这样的事情:

/\{if (.*)\}/

将用您的替换替换第一个实例{if和最后一个实例之间的所有内容}。通过在这样的模式中使用U标志使匹配变得不贪婪:

/\{if (.*)\}/U
于 2013-05-09T19:34:04.847 回答