PHP模板条件

时间:2010-11-08 13:48:44

标签: php templates conditional-statements

<if a == 5 && b < 4>
    one
<else>
    <if a != 5>
        two
    <else>
        <if a == 5 || $b == 5>
            three
         </if>
     </if>
</if>

我如何从中得到一些变数:

[0] = "a == 5 && b < 4"
[1] = "one"
[2] = "a != 5"
[3] = "two"
[4] = "a == 5 || $b == 5"
[5] = "three"

或者您如何建议在模板中制作条件?

2 个答案:

答案 0 :(得分:5)

我一般都没有反对模板系统,但为什么不使用普通的PHP呢?

<?php if ($a == 5 && ($b < 4)): ?>
    one
<?php elseif ($a != 5): ?>
....

我没有看到在PHP中痛苦地重建解析和评估逻辑的好处。

如果你真的需要这个,我会使用Smarty。

答案 1 :(得分:2)

一旦开始向模板语言引入流控制结构(if,loop ...),就会失去仅通过对变量应用搜索和替换来应用模板的能力。您需要开始解析模板以提取依赖于条件的部分,并在需要时单独重新插入它们。

您最终可能会做的是应用一个初始解析步骤:

Template "main" :  FOO <if a> BAR </if> QUX

进入:

Template "main" : FOO {temp-if-a} QUX
Template "temp" : BAR

然后,如果a为真,您将应用模板temp并在呈现模板{temp-if-a}时将其存储到变量main中。如果a为false,则不会为{temp-if-a}提供任何值。

其他控制流结构可以类似地使用此 extract-apply independent-replace 序列实现,包括嵌套序列(只需让您的模板应用程序算法递归工作)。