search
HomeBackend DevelopmentPHP TutorialPHP 模板引擎有多大意义?

现在有很多 PHP 模板引擎,并且有不同的模板语言,我一直想不通这样能带来多大的好处,所以我想听听大家的意见。

回复内容:

以前 PHP 的 OO 特性不太好,没有一些优雅的技术手段来将应用逻辑和展示分开,所以发展出了很多模板技术。但现在得益于对 OO 特性的支持,MVC 架构的流行,已经可以丢掉模板引擎了(基于历史原因除外)。Zend Framework 更是直接推荐使用原生 PHP 脚本作为模板引擎,因为 PHP 本来就支持代码与 HTML 的混合书写,同时开发者也更不需要学习新的模板语法。 以前对模版引擎,我也觉得没多大意义,毕竟这事php自己也可以做的很好
但看了twig这款模版引擎之后,我的观点有了些许变化
这款模版引擎在我看来最大的好处就是可以提高套模板的效率
简洁的语法,常用的标签、过滤器、函数,又方便扩展。总之,套模板再也不用写那冗长的php代码了。
要是php也能出个coffeescript就好了。 MVC分开的话,V已经没有意义跑模版引擎了,原生最好。
以前主要是代码分离,方便前端开发。 个人认为模版引擎对于php还是有必要的。
  1. 安全,比如默认转义输出
  2. 规范,防止团队中有人在视图中写大量的逻辑代码
  3. 性能,据说可以提高性能
  4. 可读,个人认为twig或者laravel的blade引擎比php可读性好
个人一直持反对模板引擎的观点。
主要是PHP本身已经可以实现模板引擎的功能了。或者说PHP本身就是一个模板引擎。至于给非后端人员使用,其实这事也有点牵强。确实直接使用PHP书写模板容易引起一些不规范的操作,但是这事其实是靠规范约束的,不是靠技术框架约束的,几乎所有的模板引擎都提供了运行原生代码的能力,页面开发者遇到绕不过去的点仍然会使用原生的PHP代码,然后一样可以埋雷。
良好的规范、共识和review机制来解决这类问题更有效。PHP本身就是一个非常随意的语言,你可以在任何地方取得很多模块本不应该做的事。MVC为了解耦,但是仍然很多人在model和view里读$_GET,在controller甚至view里写sql。在controller和model里写html。这种事一个MVC根本搞不定,否则这个MVC就是一个不具有普适性的MVC了。

综其原因,原生解决不了的问题,模板一样解决不了,而且还要增加学习成本和开发成本,承担不易调试的麻烦,模板引擎本身有bug的风险,多解决一个依赖的成本等等。 模板设计的意义也是目的就是为了程序逻辑与页面展现分离,便于程序员和美工分工协作而又不会互相干扰。

然而早期的PHP模板实际上是按照程序员的思维逻辑产生的一套机制,在这种机制下,包括在现在所谓的“原生”机制下,页面美工仍然需要面对包含着大量代表程序逻辑的html。不能算作是彻底的分离。

要说意义有多大,相对于曾经的ASP社区,PHP社区至少一直在努力探索着这一Web开发的核心问题,推动着这一问题的不断思考和挖掘。

要真正搞好Web开发的MVC分离,不能只站在程序员的角度思考问题,必须考虑Web开发的全程工作分工,分工清晰了,分离的方案就容易确定。
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

Repo: How To Revive Teammates
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
1 months agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.