endfor仅在for循环使用冒号替代语法时必需,须与冒号配对且不可混用大括号,纯PHP脚本中极少使用。

PHP 的 endfor 不是独立语句,而是 for 循环的替代语法结尾标记,必须和冒号 : 配对使用,只在 PHP 与 HTML 混排场景中真正有用。
什么时候必须用 endfor?
只有当你把 for 循环写成「冒号替代语法」时,才需要 endfor。这种写法不能和大括号混用,否则直接报错 Parse error: syntax error, unexpected 'endfor'。
- ✅ 正确:用冒号开头,
endfor结尾 - ❌ 错误:
for(...): { ... }或for(...) { ... } endfor - ⚠️ 注意:纯 PHP 脚本(无 HTML)里几乎没人用它——可读性差、IDE 支持弱、调试困难
for 冒号语法和大括号语法的参数完全一样
初始表达式、条件、增量三部分写法毫无区别,只是把 { 换成 :,把 } 换成 endfor:
for ($i = 0; $i < 5; $i++):
echo "第 " . ($i + 1) . " 次<br>";
endfor;
等价于:
立即学习“PHP免费学习笔记(深入)”;
for ($i = 0; $i < 5; $i++) {
echo "第 " . ($i + 1) . " 次<br>";
}
- 所有变量作用域、
break/continue行为都一致 - 不支持在循环体中嵌套另一个冒号语法的
for(会提前闭合),但可以嵌套大括号语法 - PHP 8+ 仍完全支持,但不推荐新项目使用
真实可用的混合 HTML 场景示例
它唯一合理存在的地方,是模板中穿插 HTML 标签时避免大量 <?php ?> 切换:
<ul>
<?php for ($i = 1; $i <= 3; $i++): ?>
<li>选项 <?php echo $i; ?></li>
<?php endfor; ?>
</ul>
- 比用大括号写法少写两对
<?php ?>,视觉更干净 - 但一旦逻辑变复杂(比如加
if嵌套),立刻变得难维护 - 现代框架(Laravel、ThinkPHP)都用 Blade/Tpl 模板引擎替代了这种原生写法
别为了“简洁”硬套 endfor——它不是语法糖,是历史遗留的混合模板妥协方案。真要写循环,优先用大括号;真要混 HTML,优先用模板引擎。手写 for + endfor 容易漏掉冒号或写错配对,而且 IDE 很难高亮匹配行。



















