我可以使用 PHP 将 include_once 文件分配给 $var 吗?
Posted
技术标签:
【中文标题】我可以使用 PHP 将 include_once 文件分配给 $var 吗?【英文标题】:Can I assign an include_once file to a $var with PHP? 【发布时间】:2015-02-23 16:09:07 【问题描述】:我纯粹出于学习目的尝试推出自己的 MVC,但是当我尝试加载视图文件时遇到了障碍。这是我的问题:
前端控制器抓取适当的页面控制器,页面控制器include_once()
适当的视图。视图是一个包含 html 和 php 的文件。当我从控制器返回包含文件时,包含的文件内容出现与预期的 PAGE 布局顺序不一致。 (例如:我想显示 HEADER CONTENT FOOTER,但是当我包含视图的内容时,我的控制器会吐出 CONTENT, HEADER, 1, FOOTER)。
在我的前端控制器中,我尝试将我包含的文件内容设置为一个变量,然后在 PAGE 模板中的 HEAD 和 FOOTER 之间回显。但这不能按预期工作。我可以将我的视图文件内容包装在:return "code" 中,但我不希望担心我的视图代码中的杂散引号/双引号可能会破坏脚本。我试过file_get_contents()
,但这只会吐出一个字符串(尽管在我的模板中的正确位置/序列)并且我的视图文件中的PHP没有正确(即根本没有)。
我的问题是:有没有办法可以在变量中使用include_once()
将视图文件返回到前端控制器?我似乎无法找到足够的答案。如果有帮助,我很乐意添加我的代码。
【问题讨论】:
你需要包含你的代码 如果要将包含文件渲染到变量中,可以使用输出缓冲。 Here is a simple template engine 我写了演示如何做到这一点(特别是getRenderedPartial()
)。如果您希望我在答案中扩展它,请告诉我,但这可能是不言自明的。
也就是说,在很多情况下您不需要输出缓冲,因为您可以在正确的位置使用require()
。请参阅renderTemplate()
以使用不会破坏全局空间中的变量的本地提供的变量来执行此操作。
我最终使用了 ob_start() 但很好奇为什么包含该文件不起作用...我不能将包含的文件放入 $VAR 并像使用其他任何文件一样使用它吗$VAR?
@halfer 可以!感谢您的建议和帮助!
【参考方案1】:
您可以从include()
分配返回值。这个函数的一个鲜为人知的特性是你可以有一个这样的文件:
<?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
您收集的内容,在这种情况下,它会返回到正常的输出缓冲区并实际发送。
【讨论】:
感谢您的解释,我只是想如果我将 include() 分配给 $var,我将能够在我想要的时间/地点使用该 $var,而不是立即吐出被扫描。这是对 include() 函数的逐字记录性质的根本误解。再次感谢您的解释。 没有问题@user1785997,很高兴为您提供帮助。以上是关于我可以使用 PHP 将 include_once 文件分配给 $var 吗?的主要内容,如果未能解决你的问题,请参考以下文章
PHP 警告:include_once():open_basedir 限制生效
require(),include(),require_once()和include_once()区别
require(),include(),require_once()和include_once()之间的区别
PHP内的包含语句(include(),require(),include_once(),require_once())