cari
Rumahpembangunan bahagian belakangtutorial phpPHP从写简单模板引擎,供新手学习

PHP自写简单模板引擎,供新手学习

今天要写点小东西,突然想到要用模板引擎。就“随手”写了一个,发上来供新手学习。搞了这么久PHP,想想也真是感慨,当年研究了几天的东西现在一两个小时就弄完了,当年一起完耍的女神现在已经不知所踪了。。。咳咳,下面是代码:

<?php /****************&#160;* @author: 一曲忧伤&#160;* @email: [email&#160;protected]&#160;* @discription: 简单模板引擎&#160;*/define(&#39;INVIEW&#39;, true);class view {&#160; &#160; var $tpl_dir = &#39;template&#39;;&#160; &#160; var $cache_dir = &#39;cache&#39;;&#160; &#160; var $tpl_ext = &#39;.html&#39;;&#160; &#160; var $var_left = &#39;{&#39;;&#160; &#160; var $var_right = &#39;}&#39;;&#160; &#160; function __construct($config=array()) {&#160; &#160; &#160; &#160; extract($config);&#160; &#160; &#160; &#160; if(isset($tpl_dir))$this->tpl_dir = $tpl_dir;        if(isset($cache_dir))$this->cache_dir = $cache_dir;        if(isset($tpl_ext))$this->tpl_ext = $tpl_ext;        if(isset($var_left))$this->var_left = $var_left;        if(isset($var_right))$this->var_right = $var_right;    }        function load($tplfilename) {        $tplfile = $this->tpl_dir.'/'.$tplfilename.$this->tpl_ext;        if(!file_exists($tplfile))            die('Template not found: '.$tplfile);        return $this->cache($tplfilename, $tplfile);    }    //判断模板是否缓存,如模板文件有更改则重新编译    function cache($tplname, $tpl_file) {        $cache_file = $this->cache_dir.'/'.md5($tplname).'.php';        if(!file_exists($cache_file) || filemtime($tpl_file)>filemtime($cache_file))            $this->compile($tpl_file, $cache_file);        return $cache_file;    }    //编译模板内容到PHP格式,并写入缓存    function compile($tpl, $cache) {        $body = file_get_contents($tpl);        $vl = $this->var_left;        $vr = $this->var_right;        $patterns = array(            "#$vl\s*include:(.+?)\s*$vr#i",            "#$vl\s*if\s+(.+?)\s*$vr#i",            "#$vl\s*else\s*$vr#i",            "#$vl\s*elseif\s+(.+?)\s*$vr#i",            "#$vl\s*endif\s*$vr#i",            "#$vl\s*/if\s*$vr#i",            "#$vl\s*foreach\s+(.+?):(.+?)\s*$vr#i",            "#$vl\s*endforeach\s*$vr#i",            "#$vl\s*/foreach\s*$vr#i",            "#$vl([0-9a-zA-Z_]+?)\.([0-9a-zA-Z_]+?)\.([0-9a-zA-Z_]+?)$vr#i",            "#$vl([0-9a-zA-Z_]+?)\.([0-9a-zA-Z_]+?)$vr#i",            "#$vl([0-9a-zA-Z_\[\]\'\"]+?)$vr#i",            "#$vl([0-9a-zA-Z_]+?):(.*?)$vr#i"        );        $replacements = array(            "<?php include show(&#39;\\1&#39;); ?>",            "<?php if(\\1): ?>",            "<?php else: ?>",            "<?php elseif(\\1): ?>",            "<?php endif; ?>",            "<?php endif; ?>",            "<?php if(count($\\1)>0):\$autoindex=0;foreach($\\1 as \\2):\$autoindex++; ?>",            "<?php endforeach;endif; ?>",            "<?php endforeach;endif; ?>",            "<?php echo $\\1[&#39;\\2&#39;][&#39;\\3&#39;]; ?>",            "<?php echo $\\1[&#39;\\2&#39;]; ?>",            "<?php echo $\\1; ?>",            "<?php echo \\1(\\2); ?>"        );        $body = preg_replace($patterns, $replacements, $body);        file_put_contents($cache, "<?php if(!defined(&#39;INVIEW&#39;))die(&#39;YIQU&#39;); ?>".$body);    }}$view = new view();function show($tpl) {    global $view;    return $view->load($tpl);}

使用方法PHP文件:

<?phpinclude &#39;view.php&#39;;$title = &#39;文档标题&#39;;$a=array(&#39;a&#39;=>'rows','b'=>array('c'=>'inarray')); include show('index');

使用方法HTML模板文件:

<title>{title}</title><meta http-equiv="Content-Type" content="text/html;charset=utf-8">你好,仅供参考<br>{a.a}{a.b.c}<br>{foreach a:$v}{autoindex}.{v}<br>{/foreach}{include:footer}

模板文件放在template目录,缓存放在cahce目录,这两个目录都要手动创建,缓存加上判断不可直接访问。可以使用

{include:子模板}

{if 条件}

{foreach 变量:as语句},$autoindex为自增变量

{调用函数:参数}

{变量},包含数组变量简化写法(最多只支持三维数组)

等语法。

好了,整个模板引擎实现比较简单,因为一直比较喜欢这种include方式的模板,只供新手学习原理就好了。


=====================国际惯例=======================

刚开始学着写一些博客,写得不好的地方请见谅,觉得还可以就赏脸赞下吧!

我的QQ群(PHP)336533596,QQ 451309839,欢迎加入。相互交流,聊天吹牛~


Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Cara membuat aplikasi php lebih cepatCara membuat aplikasi php lebih cepatMay 12, 2025 am 12:12 AM

Tomakephpapplicationsfaster, ikutiTheseSteps: 1) UseopcodecachinglikeopcachetostorePrecompiledscriptbytecode.2) minimizedatabasequeriesbyusingquerycachingandeficientindexing.3)

Senarai Semak Pengoptimuman Prestasi PHP: Meningkatkan Kelajuan SekarangSenarai Semak Pengoptimuman Prestasi PHP: Meningkatkan Kelajuan SekarangMay 12, 2025 am 12:07 AM

ToimprovePhpapPlicationspeed, ikutiTheSesteps: 1) EnableopCodeCachingWithApcutoreduceScriptExecutionTime.2) pelaksanaanDatabasequerycachingingPdotominimizedataBaseHits.3)

Suntikan Ketergantungan PHP: Meningkatkan kebolehlaksanaan kodSuntikan Ketergantungan PHP: Meningkatkan kebolehlaksanaan kodMay 12, 2025 am 12:03 AM

Suntikan ketergantungan (DI) dengan ketara meningkatkan kesesuaian kod PHP oleh kebergantungan transitif secara eksplisit. 1) Kelas Decoupling dan pelaksanaan khusus menjadikan ujian dan penyelenggaraan lebih fleksibel. 2) Di antara tiga jenis, pembina menyuntik kebergantungan ekspresi eksplisit untuk memastikan keadaan konsisten. 3) Gunakan bekas DI untuk menguruskan kebergantungan kompleks untuk meningkatkan kualiti kod dan kecekapan pembangunan.

Pengoptimuman Prestasi PHP: Pengoptimuman Pertanyaan Pangkalan DataPengoptimuman Prestasi PHP: Pengoptimuman Pertanyaan Pangkalan DataMay 12, 2025 am 12:02 AM

DatabaseQueryoptimizationInpinvolvesseverSlegatiesToenhancePratePratePratePratePratePregiesToRperformance.1) selectOnlynessaryColumnStoReducedatatatransfer.2) UseIndexingTospeedupdatareTrieval.3) PrevancequerycachingToStoreresultSoffReFfeFfffffffffffffffffffffffffffffffffffffffffffferseprewfffffffffffersepresseprespersepresperseprespersepresperseprespersepresperseprespers

Panduan Mudah: Menghantar E -mel dengan Skrip PHPPanduan Mudah: Menghantar E -mel dengan Skrip PHPMay 12, 2025 am 12:02 AM

Phpisusedforsendingemailsduetoitsbuilt-inmail () functionAndSupportivelibrariesLikePhpmailerandswiftmailer.1) usethemail () functionforbasiceMails, butithaslimitations.2) scorkphpmailerforadvancedfeatures

Prestasi PHP: Mengenalpasti dan menetapkan kesesakanPrestasi PHP: Mengenalpasti dan menetapkan kesesakanMay 11, 2025 am 12:13 AM

Kesesakan prestasi PHP boleh diselesaikan melalui langkah -langkah berikut: 1) Gunakan XDEBUG atau Blackfire untuk analisis prestasi untuk mengetahui masalah; 2) Mengoptimumkan pertanyaan pangkalan data dan menggunakan cache, seperti APCU; 3) Gunakan fungsi yang cekap seperti array_filter untuk mengoptimumkan operasi array; 4) Konfigurasi Opcache untuk cache bytecode; 5) mengoptimumkan bahagian depan, seperti mengurangkan permintaan HTTP dan mengoptimumkan gambar; 6) Memantau dan mengoptimumkan prestasi secara berterusan. Melalui kaedah ini, prestasi aplikasi PHP dapat ditingkatkan dengan ketara.

Suntikan Ketergantungan untuk PHP: Ringkasan CepatSuntikan Ketergantungan untuk PHP: Ringkasan CepatMay 11, 2025 am 12:09 AM

DependencyInjection (DI) inphpisadesignPatternThatManagesandReducesclassdependencies, enhancingcodemodularity, testility, andmaintainability.itallowspassingdependenciesLikedatabaseconnectionstoclassesesparameters, fasilitasieAseAsiShanandscalability.

Meningkatkan Prestasi PHP: Strategi & Teknik CachingMeningkatkan Prestasi PHP: Strategi & Teknik CachingMay 11, 2025 am 12:08 AM

CachingimprovesphpperformanceSbebyStoringResultsofcomputationsorqueriesforquickretrieval, reducingserverloadandenhancingResponsetimes.effectiveStRegiesClude: 1) Opcodecaching, yang

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Nordhold: Sistem Fusion, dijelaskan
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.