首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PHP中更好地使用Smarty?

问如何在PHP中更好地使用Smarty?
EN

Stack Overflow用户
提问于 2009-05-17 16:17:10
回答 11查看 9.8K关注 0票数 7

我发现在PHP中使用Smarty时,有时需要花费额外的时间

1)使用与PHP本身完全不同的语法

2)需要检查小的案例,因为文档不会给出更详细的细节,比如“逸出”

http://www.smarty.net/manual/en/language.modifier.escape.php

它没有说转义:“quotes”只用于双引号或也用于单引号,所以您需要编写代码来测试它。同样对于转义的情况:“javascript”--不能确切地告诉它转义是什么以及如何转义。

3)对于一些复杂的东西,需要编写helper函数或修饰符,因此需要创建新文件,并最终在PHP中重新创建。

顺便问一下,与单独使用PHP相比,使用Smarty是否提供了良好的速度?谢谢。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2009-05-17 16:51:06

首先,PHP是一种模板语言。当您谈到为基于PHP的web应用程序使用模板系统时,请记住这一点。

我听过的关于使用模板引擎的唯一“真正”的论点是,它们为模板操作提供了一种更简单的语言,如果你的模板设计人员不了解PHP,并且你不信任他们学会明智地使用PHP,那么这种语言可能会很方便。

关于这些争论,我认为如果你的模板设计者没有能力学习足够的PHP来设计模板,你可能应该考虑寻找新的模板设计者。此外,PHP本身为您可能在模板中使用的控制语句提供了不同于在代码中使用的语法。例如:

代码语言:javascript
复制
<? foreach($array as $key => $val): ?>
    <?= $val ?>
<? endforeach; ?>

VS:

代码语言:javascript
复制
<?php
    foreach($array as $key => $val) {
        echo $val;
    }

?>

就我个人而言,我认为模板引擎出现在PHP中是因为:

  1. 这就是其他语言做得更好的方式
  2. 程序员意识到他们需要一种方法来加强表示和应用程序逻辑之间的分离,而模板就是一种简单的方法。

第一个原因有点愚蠢。第二个原因可以通过一点自我控制甚至对应用程序中分离层的必要性的基本理解来克服。MVC设计模式是解决这个问题的一种方法。至于自我控制,我的规则是只使用必要的循环和if语句,以及过滤、转义和格式化屏幕输出的函数。

在广泛使用Smarty之后,我可以坦率地说,它总是给我带来了比解决方案更多的障碍。如果有什么不同的话,那就是切换到基于PHP的模板实际上减少了模板和代码的开发时间。

票数 22
EN

Stack Overflow用户

发布于 2009-05-17 16:54:40

我不喜欢模板引擎。我发现它们对于PHP来说是非常耗费资源的。

在MediaWiki 1.6.x版本中,我们默认使用Smarty,只使用PHP的内置模板,在性能上有了很大的提高。

我发现人们想要使用模板系统做的大多数事情(添加链接、更改颜色、删除文本或页面的某些部分)最好使用简单的事件挂钩系统来完成。

开放的微博平台Laconica在默认情况下不做任何模板操作。我们有一个插件为那些疯狂的模板化的人。

票数 6
EN

Stack Overflow用户

发布于 2009-05-17 16:45:21

Smarty无疑是最好的模板引擎之一。但是,根据我的经验,人们最好在使用PHP之上的任何模板引擎之前,更彻底地考虑他们的用例。

首先,PHP本身非常适合模板。使用其他模板引擎的唯一理由是,你允许不受信任的用户创建或编辑模板,因为他们可能会执行各种不好的事情。因此,如果您的项目具有用户可编辑的模板,请使用Smarty。如果不是,请继续使用PHP。

如果你的问题是代码和布局的分离,我建议你考虑实现一个轻量级的MVC风格的执行模型。或者,更居高临下地说,如果您的模板中有更深层次的逻辑代码,那么可能是时候进行一些重构了。

性能是另一个考虑因素。是的,渲染Smarty模板是有代价的。但在完成后,输出应该被缓存,从而缩短执行时间。PHP模板也是如此。PHP允许您通过使用其输出缓冲区来实现各种粒度缓存模型。但要注意过早优化:只有在代码完成并确定了实际的瓶颈之后才能进行优化!

当使用Smarty或任何其他引擎时,最大的成本是开发人员的时间。这是另一层复杂性,您将不可避免地发现自己处于这样的情况:您必须欺骗引擎来完成在纯PHP中一直可以完成的任务。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/874905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档