php模板引擎技术简单实现_php实例
用了smarty,tp过后,也想了解了解其模板技术是怎么实现,于是写一个简单的模板类,大致就是读取模板文件->替换模板文件的内容->保存或者静态化
tpl.class.php主要解析
assign 方法实现
/** * 模板赋值操作 * @param mixed $tpl_var 如果是字符串,就作为数组索引,如果是数组,就循环赋值 * @param mixed $tpl_value 当$tpl_var为string时的值,默认为 null */ public function assign($tpl_var,$tpl_value=null){ if(is_array($tpl_var) && count($tpl_var) > 0){ foreach ($tpl_var as $k => $v) { $this->tpl_vars[$k] = $v; } }elseif($tpl_var){ $this->tpl_vars[$tpl_var] = $tpl_value; } }
fetch 方法实现
/** * 生成编译文件 * @param string $tplFile 模板路径 * @param string $comFile 编译路径 * @return string */ private function fetch($tplFile,$comFile){ //判断编译文件是否需要重新生成(编译文件是否存在或者模板文件修改时间大于编译文件的修改时间) if(!file_exists($comFile) || filemtime($tplFile) > filemtime($comFile)){ //编译,此处也可以使用ob_start()进行静态化 $content = $this->tplReplace(file_get_contents($tplFile)); file_put_contents($comFile, $content); } }
简单编译方法:按照规则进行正则替换
/** * 编译文件 * @param string $content 待编译的内容 * @return string */ private function tplReplace($content){ //转义左右定界符 正则表达式字符 $left = preg_quote($this->left_delimiter,'/'); $right = preg_quote($this->right_delimiter,'/'); //简单模拟编译 变量 $pattern = array( //例如{$test} '/'.$left.'\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)'.$right.'/i' ); $replace = array( '<?php echo $this->tpl_vars[\'${1}\']; ?>' ); //正则处理 return preg_replace($pattern, $replace, $content); }
display = fetch+echo
/** * 输出内容 * @param string $fileName 模板文件名 */ public function display($fileName){ //模板路径 $tplFile = $this->template_dir.'/'.$fileName; //判断模板是否存在 if(!file_exists($tplFile)){ $this->errorMessage = '模板文件不存在'; return false; } //编译后的文件 $comFile = $this->compile_dir.'/'.md5($fileName).'.php'; $this->fetch($tplFile,$comFile); include $comFile; }
其他属性
//模板文件存放位置 private $template_dir = 'templates'; //编译文件存放位置 private $compile_dir = 'compiles'; //左定界符 private $left_delimiter = '{'; //右定界符 private $right_delimiter = '}'; //内部临时变量,存储用户赋值 private $tpl_vars = array(); //错误信息 private $errorMessage = ''; /** * 修改类属性的值 * @param array $configs 需要修改的相关属性及值 * @return bool */ public function setConfigs(array $configs){ if(count($configs) > 0){ foreach ($configs as $k => $v) { if(isset($this->$k)) $this->$k = $v; } return true; } return false; }
测试
模板文件 testTpl.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>test_tpl_demo</title> </head> <body> {$name}:{$age}:{$message} </body> </html> 运行文件 test_tpl.php <?php require 'Tpl.class.php'; $tpl = new Tpl(); $tplarr = array( 'name'=>'waited', 'age'=>'100' ); $tpl->assign($tplarr); $tpl->assign('message','this is a demo'); $tpl->display('testTpl.html'); ?>
输出:waited:100:this is a demo
生成编译文件:972fa4d270e295005c36c1dbc7e6a56c.php
以上就是本文的全部内容,希望对大家的学习有所帮助。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Dans ce chapitre, nous comprendrons les variables d'environnement, la configuration générale, la configuration de la base de données et la configuration de la messagerie dans CakePHP.

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Dans ce chapitre, nous allons apprendre les sujets suivants liés au routage ?

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.
