我可以将 include_once 文件分配给带有 PHP 的 $var 吗?

Can I assign an include_once file to a $var with PHP?

我纯粹出于学习目的尝试推出自己的 MVC,但是当我尝试加载视图文件时遇到了障碍。这是我的问题:

前端控制器抓取合适的页面控制器,页面控制器include_once()抓取合适的视图。该视图是一个包含 HTML 和 PHP 的文件。当我 return 来自控制器的包含文件时,包含的文件内容出现在预期的 PAGE 布局顺序之外。 (示例:我想显示 HEADER CONTENT FOOTER,但是当我包含视图的内容时,我的控制器会吐出 CONTENT, HEADER, 1, FOOTER)。

在我的前端控制器中,我试图将我包含的文件内容设置为一个变量,然后我在 PAGE 模板中的 HEAD 和 FOOTER 之间回显。但这并不像预期的那样工作。我可以将我的视图文件内容包装在:return "code" 但我不想因为担心我的视图代码中可能破坏脚本的杂散 quotes/double 引号而更加头疼。我试过 file_get_contents(),但这只会吐出一个字符串(尽管在我的模板中 place/sequence 的右边)并且在我的视图文件中没有正确地显示 PHP(即根本没有)。

我的问题是:有没有一种方法可以在变量中使用 include_once() return 我的视图文件到我的前端控制器?我似乎找不到合适的答案。如果有帮助,我很乐意添加我的代码。

您可以从 include() 中分配 return 值。此函数的一个鲜为人知的特性是您可以拥有这样的文件:

<?php
// config.php

return array('database_host' => 'localhost');

你可以这样阅读:

<?php

$config = include('config.php');

但是,您想要这样做:

<!-- text.html -->
<h1>Heading</h1>
<p>Hello</p>

并读入:

$html = include('text.html);

您可以尝试这样做,但是一旦 include() 扫描文件,输出就会被发送到网络服务器。这就是 PHP 的工作原理。由于没有明确的 return 值,而且 $html 变量返回为空。

因此,我们使用输出缓冲函数来修改 PHP 的行为:我们开始缓冲,然后获取并清除它。然后它不会发送到 Apache,当然除非您选择关闭输出缓冲和 echo 您收集的内容,在这种情况下它会返回到正常输出缓冲区并实际发送。