Php 为什么要保存输出直到结束?

Php 为什么要保存输出直到结束?,php,output-buffering,Php,Output Buffering,这里有一个关于编程实践的快速问题: 我一直使用echo()在生成HTML代码后立即将其输出给用户,同时使用ob_start()可以在代码后面输出标题。最近,我意识到这是一种糟糕的编程实践,我应该将HTML输出保存到最后 这有什么原因吗?它是什么,为什么输出缓冲不是一个好的选择 谢谢 无论何时将任何HTML发送到浏览器,都会接收/创建标题。发生这种情况后,PHP无法再发送任何标题。因此,通过“提前”发送代码,您禁用了PHP发送标题的功能,并限制了代码的灵活性(无论是现在还是将来的更改)。在视图中输

这里有一个关于编程实践的快速问题:

我一直使用echo()在生成HTML代码后立即将其输出给用户,同时使用ob_start()可以在代码后面输出标题。最近,我意识到这是一种糟糕的编程实践,我应该将HTML输出保存到最后

这有什么原因吗?它是什么,为什么输出缓冲不是一个好的选择


谢谢

无论何时将任何HTML发送到浏览器,都会接收/创建标题。发生这种情况后,PHP无法再发送任何标题。因此,通过“提前”发送代码,您禁用了PHP发送标题的功能,并限制了代码的灵活性(无论是现在还是将来的更改)。

在视图中输出之前处理各种事情是很好的—例如,您可能需要发送额外的标题,如
位置
设置Cookie

而且,您永远不知道您将需要什么样的视图——这次的响应是HTML,但是如果您以后希望它成为JSON或XML呢?你将很难重组


如果将所有输出留给最终视图,则可以将HTML替换为XML模板。

一些想法,不一定按顺序

  • 使用
    echo
    输出HTML是混乱的。PHP是一种模板语言,如果需要输出HTML,您可以使用它:

    <?php echo "<div id=\"foo\">" . $bar . "</div>"; ?>
    
    
    
    vs

    
    
  • 首先生成HTML,然后输出标题是一种混乱的逻辑。首先确定要发送的内容,然后发送适当的标题,然后生成内容
  • 缓冲HTML以稍后发送标题本身并不是一个真正的问题,但它是结构不良的流的一个指示器
  • 您的应用程序可能会受益于某些逻辑步骤的划分/分解

查看MVC模式。

output\u buffer()
自定义函数吗?使用
ob\u start()
可以捕获缓冲区中的所有输出。我使用输出缓冲来解决这个问题。为什么这被认为是不好的做法?@alex-我在说“我应该保存HTML输出直到结束”。@alex-还有两种类型的缓冲区,PHP缓冲区和浏览器缓冲区吗?很明显,根据浏览器的不同,它们的刷新方式也不同:@user-如果您指的是早期的HTML输出,那么基本上不建议这样做,因为您不能在以后的设计中“改变主意”。我想我理解您的逻辑步骤,但我不确定在某些情况下它是否有帮助。请容忍我,因为我不是一名专业程序员,但我一直在寻找优化代码的方法。假设我正在使用它检查用户是否登录,如果没有,则将其重定向回登录页面。对我来说,进行登录检查是否有益,一个在开始时重定向,一个显示内容,还是使用输出缓冲,在开始显示内容时只进行一次?
<div id="foo"><?php echo $bar; ?></div>