所以我对PHP,MySQL和Javascript仍然有点新,但我一直在研究一个项目,所以我一直在快速学习。但是,我觉得在我的php页面中我混合了太多的HTML和PHP。起初我认为这是标准做法,但有人告诉我你应该如何混合两者,我开始查看我的代码。
例如,当加载提交页面时,我有一个看起来像这样的循环(浓缩版本):
<?php
while ($row = mysql_fetch_assoc($submissionQuery))
{
$submissionID = $row['id'];
?>
<div class="submission" id="submission<?php echo $submissionID; ?>">
<h3><?php echo $row['title']; ?></h3>
</div>
<?php } ?>
我之所以不在PHP中包含整个块,是因为那里不仅有h3,而且我不想使用mass-echo语句。
在我看来,这看起来很糟糕,我想知道更好的方法。我想我可以将所有提交内容存储到数组中,然后稍后循环遍历它们,但我看到了几个缺点:
1)不必要将值存储到数组中。只会在之后立即召回。
2)如果提交的内容很多,则可能没有足够的内存来存储它们。
3)需要更多代码。
4)稍后仍然需要循环遍历数组,在这种情况下,我仍在混合使用PHP和HTML(仅在较小程度上)
我不知道。我只是需要一些建议,以便最好地处理这个问题,因为我不想以错误的方式做事情,然后在事情破裂或过于复杂时不得不重构一切。
答案 0 :(得分:4)
使用PHP时,几乎不可能不混用PHP和HTML。但这并不意味着您将表示逻辑与业务逻辑混合在一起。这是两个截然不同的事情。
在您的示例中,您正在混合代码。更好的方法是。
你有一个文件,称之为submission_proccess.php,在那个文件中你有这个代码。
$submission = array();
while ($row = mysql_fetch_assoc($submissionQuery)) {
$submission[] = $row;
}
//more logic
//include your view submission_view.php
现在submission_view.php
是你的view
,可以这么说。你会有这样的东西
<?php foreach ($submissions as $submission) : ?>
<div class="submission" id="submission<?php echo $submission['id']; ?>">
<h3><?php echo $submission['title']; ?></h3>
</div>
<?php endforeach; ?>
重要的是要看到您不必触摸视图文件,如果您要修改查询或过滤它。您的业务逻辑与您展示它的方式是分开的。您甚至可以删除HTML include,只需要一个带有$submission
变量的文件并将其输出为JSON。
你应该关注的一些事情是
答案 1 :(得分:0)
我真的不喜欢我的视图模板中的任何服务器端代码 - 我更喜欢只有占位符。但是,大多数框架都在视图中包含循环和回显变量。
看一下像smarty这样的模板系统(我讨厌聪明的BTW),但他们至少会给你机会把这种东西分开,这总是一件好事。
答案 2 :(得分:0)
在不同的抽象层中分离逻辑不排除也不阻止混合PHP和HTML或其他代码。关键在于实现关注点的适当分离和正确的混合程度。
在表示逻辑层中,您将使用HTML,CSS,一些Javascript和一些(可能非常少)PHP进行编码。这就是PHP的工作方式。但是,你可以保持这个代码简单,只是部件的粘合剂。
在业务逻辑层中,您将使用PHP编写代码,可能使用某些SQL或某些javascript。
为了简化问题的分离,我通常会将不同源文件中的图层分开。 在构建时,构建脚本将代码适当地混合到实际的最终工件和渲染中。
最后,你不需要自己重新发明一切。看一下PHP的一些应用程序框架和模板引擎。有些可能是直接的帮助;或者,至少,你会得到一些基于你的想法和设计策略。