Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中-通过“ob_get_clean()”返回内容相对于“return”的好处是什么?_Php - Fatal编程技术网

在PHP中-通过“ob_get_clean()”返回内容相对于“return”的好处是什么?

在PHP中-通过“ob_get_clean()”返回内容相对于“return”的好处是什么?,php,Php,与简单的“返回”相比,“ob_get_clean”返回内容有什么好处?尽管“doSomething”将以不同的方式工作,“return”或“echo”。使用一种方法的好处是什么 例如 ob_start(); $this->doSomething(); ob_get_clean(); --相比-- return $this->doSomething(); 他们是两个完全不同的东西 return从函数返回一个值 ob_get_clean返回一个字符串,其中包含自ob_start调用以

与简单的“返回”相比,“ob_get_clean”返回内容有什么好处?尽管“doSomething”将以不同的方式工作,“return”或“echo”。使用一种方法的好处是什么

例如

ob_start();
$this->doSomething();
ob_get_clean();
--相比--

return $this->doSomething();

他们是两个完全不同的东西

return从函数返回一个值

ob_get_clean返回一个字符串,其中包含自ob_start调用以来进入输出缓冲区的任何内容。在这个特定示例中,您从未将此函数的输出设置为任何内容,因此代码不应执行任何操作

使用返回:

使用ob_get_clean请注意,我们在函数中回送而不是返回:

function foo() {
    echo 'abc';
}

ob_start();
foo();
echo ob_get_clean();
除非需要,否则不要使用输出缓冲区。

简单的返回字符串要快得多,但只有在被调用函数以字符串形式返回内容时才可能。所以,这取决于$this->doSomething的作用

如果doSomething使用echo、print_r、…等功能,这两个示例完全不同。他们完全没有相似之处

哪个更好?这完全取决于$this->doSomething;做它实际上有返回值吗?它会在屏幕上回响吗

它运行doSomething,然后返回它返回的任何内容。就这样

另一方面,另一个例子是:

ob_start();
$this->doSomething();
ob_get_clean();
这样做的目的是捕获doSomething在输出缓冲区中使用echo或类似方法打印到屏幕上的任何内容。然后它将缓冲区作为字符串获取,并立即丢弃它


ob_get_clean返回一个字符串,因此需要将其保存到一个变量中才能使用。

例如,Wordpress有两组函数,用于为基于WP的站点生成输出的大部分相关内容。将有一个foo生成一些内容并输出。然后是一个getfoo版本,它生成相同的内容,但返回它而不是输出

实际上,完全复制函数中的所有代码而只更改一行是不好的做法:

function foo() {
   ...do lots of stuff
   echo $generated_content;
}
function getfoo() {
   ...do exactly the same stuff
   return $generated_content;  // the only line that'd be different
}
您可以简单地使用

function getfoo() {
   ... do lots of stuff
  return $generated_content;
}

function foo() {
    echo getfoo();  // call getfoo() and output it automatically
}
或者走另一条路:

function foo() {
   ... do lots of stuff
   echo $generated_content;
}
function getfoo() {
   ob_start();
   foo();
   return ob_end_clean();
}

两个版本将完成相同的事情,但在不同的版本中完成。只需获取其同类函数的返回值,并将其输出即可。另一个在另一个方向上工作,并捕获近亲函数的输出,并返回捕获的数据。

比?比…使用输出缓冲区快得多。很抱歉,我想这从上下文中是清楚的。输出缓冲可以大大加快速度。这取决于你如何使用它。抱歉,答案毫无意义,因为问题否,在返回字符串时滥用输出缓冲会慢得多。我会用一个例子来修正我的答案,证明原因,即使这与原来的问题没有太大关系。我唯一感兴趣的是知道哪种方法更好?这两个例子完全不同。谢谢有人这么说+1这两个示例的上下文是什么?这就像比较苹果和汽车。我想知道的是使用一种方法比另一种方法的好处。我知道函数“doSomething”需要以“return”或“echo”不同的方式工作,但我想知道哪种方法更好?@BostonGuy:两者都不好,因为它们不一样。你的问题没有答案。使用更适合您的程序和/或在您的程序上下文中更有意义的选项。@RocketHazmat-不能完全同意您的意见。至少我可以说,这两种方法都可以用于从函数返回值或返回由函数填充的输出缓冲区中的字符串。@BostonGuy:在第一个示例中,您没有保存ob_get_clean的结果,而是将其丢弃。哪一个更好取决于这个->做什么;是的,所以。。。它有什么作用?它是回音还是回音?它是如何使用的?它在别处叫吗?没有好坏之分,这取决于你在做什么。完全不清楚你为什么得到+4。也许孩子们还没睡觉?请回答无法回答的问题,因为它不清楚,所以你为什么只是在说话?@hek2mgl个人认为这不是一个不清楚的问题,但如果你回答了,你非常欢迎以不清楚结束投票-不,不,如果每个人都认为这个问题是明确的,那么对我来说没关系。我认为,如果没有问题所提供的更多上下文,这些主题只是不可比较的。很好的解释,但输出缓冲区的性能影响肯定是不可忽略的,因此,这里必须推荐使用“返回”方式。
ob_start();
$this->doSomething();
ob_get_clean();
function foo() {
   ...do lots of stuff
   echo $generated_content;
}
function getfoo() {
   ...do exactly the same stuff
   return $generated_content;  // the only line that'd be different
}
function getfoo() {
   ... do lots of stuff
  return $generated_content;
}

function foo() {
    echo getfoo();  // call getfoo() and output it automatically
}
function foo() {
   ... do lots of stuff
   echo $generated_content;
}
function getfoo() {
   ob_start();
   foo();
   return ob_end_clean();
}