如何在php中设置和输出缓冲区内容

如何在php中设置和输出缓冲区内容,php,Php,我对PHP真的很陌生 我有以下代码: <?php cms_loop('500');?> <div class="item"> <p class="contents"></p> </div> <?php cms_loop_end('500');?> 及 但这不起作用。感谢您提供的任何帮助我假设您试图实现某种模板呈现,因为您显然试图呈现一些HTML片段以供以后使用。为了实现

我对PHP真的很陌生

我有以下代码:

<?php cms_loop('500');?>

<div class="item">
    <p class="contents"></p>
</div>

<?php cms_loop_end('500');?>


但这不起作用。感谢您提供的任何帮助

我假设您试图实现某种模板呈现,因为您显然试图呈现一些HTML片段以供以后使用。为了实现这一点,PHP需要了解这一点。不过,在您的示例中,PHP和HTML共存,而任何一方都不了解另一方。您的HTML还不是PHP领域的一部分

让我们改变这一点

你给出的HTML片段通常被称为部分,也就是说,它是更大内容的一部分。类似于侧边栏是index.html文件的概念部分,但不是物理部分,除非包括:


欢迎
<> P>让我们采取类似的方法,将HTML首先分解成自己的文件:


partial.html.php

现在我们需要找到一种方法,将这段HTML转移到PHP领域。最简单的方法是读取它并将其分配给变量:

$html=file\u get\u contents('partial.html.php');
让我们回到你的函数,因为现在你可以做:

函数cms\u循环($html){
echo$html;
}
我从函数参数列表中删除了
$id
,主要原因如下:

  • 您尚未读取或写入数据库
  • 如果你这么做了,这就错了
  • 模板中不使用任何变量,因此不需要传入任何变量
让我们仔细考虑一下最后一个问题。如果我们可以将数据传递到模板中,例如动态更改分配给这两个HTML元素的类,那不是很好吗

这肯定很好,也有可能——我们需要的只是一点点输出缓冲。但首先,让我们更改模板以满足新的需求:


您可以在下面找到工作代码:


来自缓冲内容的Hello

请注意,我删除了
echo ob_get_contents()
cms\u loop()
函数

演示:
(有一个不带帐户运行的选项)

这里的
500
代表什么?在该函数内调用
ob\u get\u contents()
没有意义,因为此时您还没有开始任何输出。您的HTML仅在函数完成执行后出现。你想用这段代码实现什么?不清楚“不工作”到底意味着什么。你期望它做什么,结果发生了什么?如上所述,代码似乎没有多大意义,因此我们很难猜测您的真实身份intentions@hppycoder我将在稍后点P.S.将id保存到数据库中<代码>我对PHP真的很陌生
…我建议CMS对于初学者来说不是理想的主题。我不想让你气馁,但你应该现实一点。不要只想马上做一些很酷的东西。相反,学习该语言的基础知识,学习编程技术,如面向对象的代码、数据库、web如何深入工作,并学习CMS系统的现有示例。当你有了基本的构建块,并且练习了一些练习和小项目,那么你可能已经准备好处理像CMS这样复杂的问题了。嘿:)谢谢你的回答,但我只想得到我拥有的两个循环函数之间的所有东西。在本例中,这应该是类项的div和类内容的p。这是我猜测的-但是您需要一个类似于我的答案中的函数来实现这一点。您不必使用数据数组,也不必在模板文件中执行任何高级操作,但是如果您想缓冲一些HTML(或任何其他输出,就这一点而言),那么您就应该这样做。你不必使用任何基于文件的东西,你只需要把你的模板(因为它就是这样)放在某个变量上。但对于缓冲,这将始终必须按照我的回答中描述的方式进行(即
render()
函数的主要部分)。因为……现在,你只是在PHP和HTML之间切换。谢谢你的回复,我会回到基础上来,因为我没有真正理解代码。我想将此标记为一个答案,但不能这样做,抱歉:)我已对我的答案进行了大量修改,以便您能够更好地了解手头的问题。顺便说一句:虽然ADyson首先学习基础知识是绝对正确的,但是学习一点如何模块化HTML(也就是说如何模板化)是一个很好的起点。只要你不想写你自己的CMS;-)关于接受我的回答,这应该是有帮助的:
function cms_loop($id){
    ob_start();
    echo ob_get_contents();
}

function cms_loop_end(){
    ob_end_flush();
}