我正在用PHP构建一个包含许多页面的网站,我们是一个由9人组成的团队。因此,我想探讨一下何时应该使用PHP模板引擎以及何时不应该使用。因此,我对使用PHP模板引擎的优缺点感兴趣,这样我就可以决定是否在我的情况下使用它。
我正在用PHP构建一个包含许多页面的网站,我们是一个由9人组成的团队。因此,我想探讨一下何时应该使用PHP模板引擎以及何时不应该使用。因此,我对使用PHP模板引擎的优缺点感兴趣,这样我就可以决定是否在我的情况下使用它。
从我的多年经验来看,结论非常简单:不要使用任何模板系统。
相反,应该按照正确的方式编写 PHP!除了echo
和 for
/foreach
之外,永远不要在 .html 文件中执行其他操作。如果你使用 MVC 这样的设计模式编写代码,这点就更加明显了:只需在内部执行echo
和foreach
,并解释给前端,他们不应该碰 <?php
和 ?>
标记中间的代码。
自此以来,这种方法一直适用于我。通常比解释 Smarty 更困难的是向别人解释不要乱动 PHP。
模板系统也会增加服务器负载(有时只是轻微的增加,有时可能会感觉到)。尽管起初可能看起来过于优化,但我更喜欢保持它的简单性。
注意:
例如,Smarty 在 .html 文件中不容易被发现,因为我所知道的唯一具有 Smarty 语法高亮功能的插件是 NetBeans 插件,而且还处于测试阶段。而 PHP 的语法高亮却可以在任何优秀的编辑器中看到。这也更容易使前端发现并避免对其进行干扰。
{$var}
之外的其他操作)echo
和迭代以进行输出:foreach
和for
应满足99%的迭代需求;还可以使用while
和do while
对于我来说,是否应该使用单独的模板引擎还是仅使用PHP进行模板设计,这始终归结为以下几点:
何时使用模板引擎
当您必须限制(沙盒)可以在模板中运行的代码时。
何时不使用模板引擎
所有其他情况下都不使用模板引擎。
PHP的纯粹主义者会告诉你,PHP本身就是一个模板引擎。在这个问题上,我自认为是个纯粹主义者,建议只使用PHP。它甚至有一种备选语法用于if和loop块,这些块几乎是为了模板风格的可读性而设计的。
然而,有些人仍然喜欢使用模板引擎,比如Smarty。如果您选择这条路,有几个问题需要考虑:
谁将维护模板? 如果负责维护模板的人已经知道PHP,那么让他们学习一个新的伪PHP模板引擎就没有意义。如果他们不知道PHP,那么这仍然值得怀疑,这取决于他们的背景,因为大多数模板引擎只实现了类似于PHP标记的语法(如<% %>
)
您的模板会变得多么复杂? 有些模板引擎在模板中可以做的事情非常受限制(强制您将所有内容都放在控制器中,某些甚至到了毫无用处或不必要的程度),而其他引擎则与原始PHP一样自由(许多人会认为这是模板引擎的目的所在)。
效率和速度有多重要? 模板引擎会增加开销。毫无疑问。将自定义标记转换为PHP标记需要资源。它们增加了多少以及它们的重要性取决于许多因素(包括引擎本身)。如果您需要更快速的站点,则我建议将模板引擎列为首要去除的内容之一。
如我所说,我也建议使用PHP作为您的模板“引擎”,但请注意一些陷阱。主要是很容易在模板中添加过多的逻辑。确保您有一个规则仅包含echo
、for/foreach
和基本的if
块(例如if is_admin()
等),并确保执行该规则。
echo
、foreach
和if
的工作原理并不难。这些构造在模板引擎中也不比在PHP中更难。 - OZ_<?php echo $user->name; ?>
时,他们知道不要碰它,但如果他们看到{username},他们可能不知道它的含义。 - Wesley Murch我建议使用一些良好的分离方法来使你的显示逻辑与其他数据获取处理分离。实施MVC是一个很好的方法,大多数PHP框架提供了MVC框架。
这样可以让每个人都能够编写更加整洁的代码,并且保持模板简单,以便那些不太懂技术的人(例如前端设计师)能够进去进行编辑。
对于模板引擎,我建议您只使用php。不需要像smarty这样的额外负担。他们只需要了解基本的php即可。您可以使用.phtml
文件扩展名来表示模板文件...为什么要使用模板引擎呢?
明确一点,.phtml
模板文件中只应包含echos
和foreachs
,不应在其中执行任何核心代码。
echo
来输出信息并使用foreach
来进行迭代以达到输出的目的。 - Bogdan Constantinescu.phtml
文件中。我并不是指在模板标记中包含所有的代码等内容。 - Jim你应该总是使用一些机制来将标记语言与代码分离,就像你不应该在HTML中嵌入CSS一样。有太多的选项可以给你一个扁平的答案。有像smarty或fasttemplate这样的模板引擎,还有带有模板系统的框架(如cake、code igniter等)。你应该根据自己的需求对它们进行个别评估。
事实上,这里的关键词是分离和重用。
在团队中开发和分段工作负载的最佳方式是,当Web设计师(集成器/HTML专家等)没有机会破坏编程部分(数据库、文件、会话、语法错误等)时。
我建议使用FigDice模板引擎,它在逻辑(程序、数据库、文件、算法等)和演示(视图和它们呈现的信息)之间进行非常干净的分离,确保总体安全。
FigDice当然支持宏(文件的可重用部分)、包含、迭代等许多功能,并且还提供了一种独特的演示/逻辑分离方法,通过数据提供者的控制反转(视图拉取它们需要显示的信息,而不是让控制器将数据推入模板中,这通常是几乎所有模板引擎的情况)。
这使得HTML设计师真正能够决定他想要何时以及如何呈现,而不会有任何破坏代码的风险。
我很乐意收到反馈和评论。谢谢
你尝试过Stamp Template Engine吗?
它仍会增加服务器负载,但我认为它解决了模板引擎的其他缺点。与Smarty和所有其他PHP模板引擎不同,StampTE完全没有逻辑。您只需使用适当的HTML注释标记区域(大多数设计师和前端工程师已经具有这些标记,仅用于可读性)。它依靠这些标记为后端开发人员提供剪切和粘贴功能。后端PHP程序员可以从模板中复制并粘贴这些区域(就像纸模型一样),并使用它构建网站和Web应用程序GUI。此外,它们本身具有非常友好的API。例如,要剪切区域:
<!-- cut:siteMenu -->
<nav>
<ul>
<li>...</li>
</ul>
</nav>
<!-- /cut:siteMenu -->
他们可以使用面向对象的表示法:
$template->getSiteMenu()->setLink( ... ); etc..
我觉得这真的很酷。
<?php if ($condition): ?>一些HTML代码<?php else: ?>其他HTML代码<?php endif; ?>
- Kaii