gpt4 book ai didi

php - 为什么 CodeIgniter 将输出存储在变量中?

转载 作者:可可西里 更新时间:2023-11-01 00:06:19 35 4
gpt4 key购买 nike

我最近查看了 CodeIgniter 的代码,只是想看看它是如何工作的。

我不明白的一件事是为什么 CodeIgniter 将 View 生成的所有输出存储在一个变量中并在脚本末尾输出它?

这是 ./system/core/Loader.php 第 870 行的一段代码
CI Source code @ GitHub

/*
* Flush the buffer... or buff the flusher?
*
* In order to permit views to be nested within
* other views, we need to flush the content back out whenever
* we are beyond the first level of output buffering so that
* it can be seen and included properly by the first included
* template and any subsequent ones. Oy!
*/
if (ob_get_level() > $this->_ci_ob_level + 1)
{
ob_end_flush();
}
else
{
$_ci_CI->output->append_output(ob_get_contents());
@ob_end_clean();
}

函数 append_output 将给定的字符串附加到 CI_Output 类中的一个变量。
这样做而不使用 echo 语句是否有特殊原因,或者这只是个人偏好?

最佳答案

有几个原因。原因是您可以加载 View 并将其返回而不是直接输出:

// Don't print the output, store it in $content
$content = $this->load->view('email-message', array('name' => 'Pockata'), TRUE);
// Email the $content, parse it again, whatever

第三个参数 TRUE 缓冲输出,因此结果不会打印到屏幕上。如果没有,你必须自己缓冲它:

ob_start();
$this->load->view('email-message', array('name' => 'Pockata'));
$content = ob_get_clean();

另一个原因是您不能在发送输出后设置 header ,例如您可以使用 $this->output->set_content($content),然后在某个时候设置 header (设置内容类型 header 、启动 session 、重定向页面等)然后实际显示(或不显示)内容。

一般来说,我发现让任何类或函数使用 echoprint 是非常糟糕的形式(例如在 Wordpress 中很常见)。我几乎总是宁愿使用 echo $class->method(); 而不是让它为我回显,原因与上面概述的相同——比如能够将内容分配给一个变量而不会溢出直接进入输出或创建我自己的输出缓冲区。

关于php - 为什么 CodeIgniter 将输出存储在变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10708396/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com