php模板引擎原理是什么?
php模板引擎原理是作为视图层和模型层分离的一种有效解决方案,让前后端更好的分工协作,来自于经典的MVC模型,即【模型层-视图层-控制器模型】,将M和V实现代码分离,从而使同一个程序可以使用不同的表现形式。
php模板引擎原理是:
1、模板引擎的由来
模板引擎思想来自于经典的MVC
模型,即模型层 - 视图层 - 控制器模型。MVC本来存在于桌面程序中,M指数据模型,V指用户界面,C指控制器。使用MVC的目的是将M和V实现代码分离,从而使同一个程序可以使用不同的表现形式。
随着Web的流行,这一模型被引入Web开发中。此时,V(视图层),也就是通常所说的模板,实现了数据生成和数据展示的分离。早期的视图通常是由html元素控制界面,随着互联网的发展,一些新的表现出技术(例如Flex等)流行起来,MVC使得数据和表现得到分离,一套数据可以用于多种表现层而无需修改逻辑层的代码。例如,可以在M层(模型层)生成博客文章列表的数据,然后可以在传统的Web页面、RIA应用、手机应用中使用不同的表现层技术来展示数据,而不用修改逻辑层的代码,实现前端和后端的分离。
此外,AJAX
技术的流行、Jquery库的普遍应用,使早期html、Javascript、PHP代码混写的情况得到改观。AJAX技术的应用使数据的请求和生成、展示实现了分离,促进了表现层(V)和代码层的分离。
模板引擎作为视图层和模型层分离的一种有效解决方案,让前后端更好的分工协作。PHP开发经历了前后端混编,到极力推崇模板引擎(以Smarty为代表),再到如今的回归自然、甚至质疑PHP模板引擎存在的必要性这几个发展阶段。
PHP中到底有没有必要使用模板引擎?模板引擎的原理是什么?为什么Smarty会那么的流行,而如今在PHP社区又引起如此大的争论?这些都是在接下来讨论的问题。
2代码分层的思想
PHP作为轻巧灵活的脚本语言,非常适合Web开发这种开发周期短、需求变化快、强调用户体验的需求和业务。PHP早起开发,通常都是PHP代码和HTML混写,代码中到处可见数据库操作、逻辑判断、HTML代码生成,甚至Javascript代码等。对于小型项目,这种编码方式能够很快的完成需求。但是一旦项目扩大后,前端逻辑会越来越复杂,这种完全混写的方式必将造成代码可读性差和后期维护困难等等问题。
在PHP发展初期,我们可能这么写:
<html> <head> <meta http-equiv="content-type"content="text/html;charset=utf-8"> <title>最原始的PHP编码风格 - 李苦李</title> </head> <body> <table> <tr> <td>ID</td> <td>姓名</td> </tr> <?php mysql_connect("localhost","admin","password")or die("Could not connect:".mysql_error()); mysql_select_db("user_db"); $result= mysql_query("select id,username from user"); while($row= mysql_fetch_array($result)) { echo"<tr><td>".$row['id']."</td><td>" .$row['username']."</td></tr>"; } mysql_free_result($result); ?> </table> <?php //其他功能模块 ?> </body> </html>
显而易见,对于上述代码无论是在可读性、可维护性还是在代码的复用性上都是极其差的。需要想办法实现数据生成和显示的分离,通常最容易想到的办法就是把和数据库打交道的代码单独放到一个文件中,显示数据的部分放到另一个文件中。新建文件data.php
并获取数据,如以下代码所示:
<?php mysql_connect("localhost","admin","password")or die("Could not connect:".mysql_error()); mysql_select_db("user_db"); $result= mysql_query("select id,username from user"); while($row= mysql_fetch_array($result)) { $data[] =$row; } mysql_free_result($result); ?>
这两种做法都没有实现PHP代码和HTML代码的分离,但是第二种做法相比第一种做法实现了数据获取和数据展示的分离。在第二种处理方法中,其中一个文件专门负责和数据库交互,获取和处理数据。然后交由另一个文件显示数据,这个负责显示的文件只是进行一些简单的逻辑操作,例如循环、判断、输出等。显然,第二种处理方式比第一种处理方式更加易于维护。
对于第二种处理方式,我们还可以使用HereDoc语法使其更简洁,代码如下所示:
<?php foreach($dataas$value) { echo<<< TM <tr><td>$value[id]</td><td>$value[username]</td></tr>; TM; } ?>
第二种处理方式即原生态的PHP模板机制,是当前一些PHP程序所采用的模板机制,特点就是简单灵活、符合PHP的语法和使用习惯、学习成本低。缺点就是不能实现一些高级功能,例如实现可配置化、缓存、使得模板文件脱离PHP语法等等。今天先写到这里,这些问题我们将会在接下来的文章中陆续解决。
相关学习推荐:PHP编程从入门到精通
Atas ialah kandungan terperinci php模板引擎原理是什么?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.
