Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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 为什么CodeIgniter将输出存储在变量中?_Php_Codeigniter_Variables - Fatal编程技术网

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

Php 为什么CodeIgniter将输出存储在变量中?,php,codeigniter,variables,Php,Codeigniter,Variables,我最近浏览了CodeIgniter的代码,只是想看看它是如何工作的 我不明白的一点是,为什么CodeIgniter将视图生成的所有输出存储在一个变量中,并在脚本末尾输出 以下是第870行的./system/core/Loader.php中的一段代码 函数append_output将给定字符串追加到CI_output类中的变量。 这样做而不使用echo语句是有特殊原因的,还是仅仅是个人喜好?答案在你帖子的评论中 /** * In order to permit views to be neste

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

我不明白的一点是,为什么CodeIgniter将视图生成的所有输出存储在一个变量中,并在脚本末尾输出

以下是第870行的./system/core/Loader.php中的一段代码

函数append_output将给定字符串追加到CI_output类中的变量。

这样做而不使用echo语句是有特殊原因的,还是仅仅是个人喜好?

答案在你帖子的评论中

/**
* 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!
*/
这样你就可以去:

$view = $this->load->view('myview', array('keys' => 'value'), true);
$this->load->view('myotherview', array('data' => $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();
另一个原因是在发送输出后不能设置标题,例如,您可以使用用户
$this->output->set_content($content)
,然后在某个点设置标题(设置内容类型标题、启动会话、重定向页面等),然后实际显示(或不显示)内容


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

这样的问题不是更适合我吗?通常,控制数据是一种很好的做法(展开上一段!)哦,我忘记了电子邮件视图部分,这是最常见的示例!对于一般示例
function greet($str){echo“Hello$str!”;}
echo strtolower(greet('Andrew');
load->view()echo是有意义的,但不是每次都用output类设置一点输出。这就是我的观点哈哈!它提供了对如何处理数据的更多控制
ob_start();
$this->load->view('email-message', array('name' => 'Pockata'));
$content = ob_get_clean();