跳出与继续 Break Continue
{break} 与 {continue} 用于在循环内部控制流程,分别对应 PHP 的 break; 与 continue;。
一、编译行为
| 标签 | 编译为 | 作用 |
|---|---|---|
{break} |
break; |
立即终止整个循环 |
{continue} |
continue; |
跳过本次迭代,进入下一次 |
两者都不接受参数(不支持 {break 2} 这类层级写法),均直接 emit 对应的 PHP 语句。
二、适用循环
可在 {foreach} / {list} / {category} 任一循环内使用(三者循环层同构,都编译为 foreach)。
三、典型用法
{foreach from=$list item=item}
{if $item.status eq 0}
{continue} {* 跳过未发布项 *}
{/if}
{if $item@iteration > 10}
{break} {* 只显示前 10 条 *}
{/if}
<p>{$item.title}</p>
{/foreach}
上例中,{continue} 把状态为 0 的项跳过;{break} 在迭代序号超过 10 时提前结束循环。
四、与 limit 的取舍
- 只是「取前 N 条」:优先用
{foreach ... limit=N}(或{list ... limit=N}),在取数层面就限制,更高效; - 需要「按条件动态提前结束」或「跳过某些项」:才用
{break}/{continue}。
五、注意事项
{break}/{continue}必须处于循环体内;在非循环上下文使用会编译出非法的 PHP(break不在循环/switch 内),应避免。- 它们不影响循环元数据的
total(@total仍为切片后的总数),只影响实际输出多少次。