当您需要包含其他PHP(或模板)文件时,为什么建议在PHP语言中使用ob_start()?
这很糟糕:
require_once( dirname( __DIR__ ) . '/views/file.php' );
这很好:
ob_start();
require_once( dirname( __DIR__ ) . '/views/file.php' );
$output = ob_get_clean();
return $output;
但我不明白为什么
答案 0 :(得分:1)
没有这样的推荐,如果您认为有必要,请使用它。
ob_start()
告诉PHP开始缓冲输出,任何方式的任何echo
或其他输出都将被缓冲,而不是直接发送到客户端。
这可用于多种用途,其中一个即使在产生输出后也能够发送标题,因为缓冲还没有发送输出。
在这段特殊的代码中,您使用输出缓冲区来捕获包含文件生成的输出并将其存储到变量中,而不是将其发送到客户端。
答案 1 :(得分:1)
如果不了解您的计划,以及谁告诉您这样做,就很难说。首先,底部的返回$输出行 - 你从哪里返回?
我可以想到您希望以这种方式包含脚本的许多原因。
在PHP中,ob_ *函数处理输出缓冲,即捕获任何打印到PHP代码作为字符串运行的页面/屏幕的内容。
这可能是必要的,因为经典PHP中非常常见的模式是在任何<?php
标记之外编写直接HTML。当您以这种方式输出文本时,它会直接发送到屏幕,绕过您可能想要使用的任何中间处理。程序员也可能希望在一个地方定义所有包含,以便可以轻松地将它们切换出来,然后在脚本中引用要作为变量输出的文本。
它也可能是一种阻止不输出任何文本意外输出空白区域的方式,这使得以后无法在脚本中更改标题。我之前遇到过大型代码库,其中每个包含都被?>
宗教关闭,之后可能会或可能不会包含空格。这可以用相对较少的努力解决问题。
在编程中,通常有许多不同的方法可以做到,而且并不总是其中一种方式是正确的。&#34;最终目标是创造一些能够完成其工作,可维护并且可以被其他程序员理解的东西。如果你为了追求可维护性而必须编写几行额外的代码,那么它就值得一试。
答案 2 :(得分:0)
ob_start()
是一个以output buffering开始的函数,ob_get_clean();
刷新缓冲区,看起来就是从函数返回它。
这允许将任何print or echo
语句添加到缓冲区,然后将所有语句存储到变量中并返回并打印到应用程序的其他位置。