一个简单的模板类(PHP)

PHP模板类代码示例 通过以上步骤,我们成功地创建了一个简单的PHP模板类,并使用它来渲染模板文件。当然,这只是一个简单的示例,实际应用中可能需要更复杂的模板类来满足不同的需求。总结起来,PHP模板类可以帮助我们更好地组织和管理模板文件,提高代码的可读性和可维护性。通过创建一个模板类,并使用它来渲染模板文件,我们可以将业务逻辑与界面展示分离,使代码更加清晰和易于开发。模板类可以帮助我们更好地组织和管理模板文件,提高代码的可读性和可维护性。首先,我们需要创建一个名为Template的PHP类,该类将包含模板相关的方法和属性。 阅读详情

接上话,有了一个数据操作类,这样项目只能简单地操作数据,但是要达到能够和美工一起显示美好的页面,则需要一个比较好的模板引擎。与SMARTY这样比较庞大的模板引擎相比,我想下面这个则真算得小得多了。

这个模板类是我以前在网上看到的,写得比较好,所以我就引用了,还不知道作者是谁,这里就先讲一下这个类的原理。

首先,这个类只有一个简单的正则解析器。但是基本上可以用到了。如果再能够在此基础上扩展,我相相信这个小东西很有发展,请有相同爱好的同志们,来加入到强化他的目地。我这就抛下砖。

template.class.php

 

<?php
class template{
	
	//变量储存的数组
	private $vars = array();
	//模板目录
	public $template_dir = './template/';
	//缓存目录 
	public $cache_dir = './cache/';
	//编译目录
	public $template_c_dir = './template_c/';
	//模板文件
	public $template_file = '';
	//左连接符
	public $left_delimiter = '<{';
	//右连接符
	public $right_delimiter = '}>';
	//编译文件
	private $template_c_file = '';
	//缓存文件
	private $cache_file = '';
	//缓存时间
	public $cache_time = 0;
	
	//内置解析器
	private $preg_temp = array(
		'~<\{(\$[a-z0-9_]+)\}>~i'
            => '<?php echo $1; ?>', // <{$name}>
        
        '~<\{(\$[a-z0-9_]+)\.([a-z0-9_]+)\}>~i'
            => '<?php echo $1[\'$2\']; ?>', // <{$arr.key}>
        
        '~<\{(\$[a-z0-9_]+)\.([a-z0-9_]+)\.([a-z0-9_]+)\}>~i'
            => '<?php echo $1[\'$2\'][\'$3\']; ?>', // <{$arr.key.key2}>
        
        '~<\?php\s+(include_once|require_once|include|require)\s*\(\s*(.+?)\s*\)\s*;?\s*\?>~i'
            => '<?php include \$this->_include($2); ?>', // <?php include('inc/top.php'); ?>
        
        '~<\{:(.+?)\}>~' => '<?php echo $1; ?>', // <{:strip_tags($a)}>
        
        '~<\{\~(.+?)\}>~' => '<?php $1; ?>', // <{~var_dump($a)}>
        
        '~<\?=\s*~' => '<?php echo ', // <?=
	);
	
	/**
	 *构造器
	 */
	public function __construct(){
		if(defined('TMP_PATH')){
			$this->template_c_dir = TMP_PATH . 'template_c/';
			$this->cache_dir	  = TMP_PATH . 'cache/';
		}
	}
	
	/**
	 *变量赋值
	 *@param $key mixed 键名
	 *@param $value mixed 值
	 */
	public function assign($key , $value = ''){
		if(is_array($key)){
			$this->vars=array_merge($key,$this->vars);
		}
		else{
			$this->vars[$key]=$value;
		}
	}
	
	/**
	 *显示页面
	 *@param $file string 模板文件名
	 */
	public function display($file){
		echo $this->fetch($file);
	}
	
	/**
	 *返回缓存区内容
	 *@param $file string 模板文件名
	 *@return $content string 缓存内容
	 */
	public function fetch($file){
		$this->template_file = $file;
		$desc_template_file = $this->template_dir .$file;
		$desc_content = $this->readfile($desc_template_file);
		
		$template_c_file_time= filemtime($desc_template_file);
		//若在超过缓存时间,则编译
		if($this->cache_time < time()-$template_c_file_time){
			$this->complie($this->token($desc_content));
		}
		//以下获取缓存区的内容
		ob_start();
		
		@extract($this->vars , EXTR_OVERWRITE);
		include ($this->template_c_dir . $this->template_c_file);
		
		$content = ob_get_contents();
		ob_end_clean();
		
		//$this->store_buff($content);
		return $content;
	}
	
	/*
	 *替换分隔符,以及替换解析器的内容
	 *@param $content string 读取的内容
	 *@return $token_content string 替换后的内容
	 */
	public function token($content){
		$token_content = $content;
		if($left_delimiter != '<{'){
			$token_content = str_replace($left_delimiter , '<{' , $token_content);
			$token_content = str_replace($right_delimiter, '}>' , $token_content);
		}
		$token_content = preg_replace(array_keys($this->preg_temp), $this->preg_temp , $token_content);
		return $token_content;
	}
	
	/*
	 *生成储存
	 *@param $content string 读取的内容
	 *
	 
	public function store_buff($content){
		$this->cache_file = md5($this->template_file) . $this->template_file . '.html';
		$tempfile = $this->cache_dir . $this->cache_file;
		$fp = fopen($tempfile , 'w');
		fputs($fp,$content);
		fclose($fp);
		unset($fp);
	}
	*/
	
	/*
	 *编译储存
	 *@param $content string 读取的内容
	 *
	 */
	public function complie($content){
		$this->template_c_file = md5($this->template_file) . $this->template_file . '.php';
		$tempfile = $this->template_c_dir . $this->template_c_file;
		$fp = fopen($tempfile , 'w');
		fputs($fp,$content);
		fclose($fp);
		unset($fp);
	}
	
	/*
	 *读取文件的内容
	 *@param $file string 文件名
	 *@return $content string 文件内容
	 */
	public function readfile($file){
		if(file_exists($file)){
			$fp = fopen($file , 'r');
			$content ='';
			while(!feof($fp)){
				$content .= fgets($fp,4096);
			}
			fclose($fp);
			unset($fp);
			return $content;
		}
		else{
			exit($file . ' not exist!');
		}
	}
	
	/*
	 *模板嵌套
	 *@param $file string 文件名
	 *@return string 文件的绝对地址
	 */
	public function _include($file){
		if(file_exists($this->template_dir . $file)){
			return ($this->template_dir . $file);
		}
		else{
			echo "模板文件不存在";
			exit;
		}
	}
}
?>

有了这个模板,你可以忘记那些大型的模板,毕竟你的美工不会在他的切片文件里写那么多SMARTY的标记,而只要他切好,你可以直接用,不用去修改images , css ,js 地址了。
如何使用MCP2518FD外部CAN FD控制器实现速速CAN通信 1、SPI时序MCP2518FD外部CAN FD控制器具有小尺寸和SPI接口,可实现轻松连接。可将CAN FD通道轻松添加到缺少CAN FD外设或没有所需CAN FD通道的微控制器上。MCP2518FD支持经典格式 (CAN 2.0B) 和CAN灵活数据速率 (CAN FD) 格式中的CAN帧格式,符合ISO11898-1:2015标准。框图:本文实验板MCU:CAN FD控制器:MCP2518FDCAN FD收发器:ATA6560开发环境:想了解开发板更详细信息,请点击。 阅读详情

相关推荐

DIC新手避坑指南:压缩实验中的应变测量常见错误与数据校验技巧

本文为DIC技术新手提供了压缩实验中应变测量的全面避坑指南。文章系统梳理了从试样尺寸录入、散斑质量到数据后处理中应变方向与符号混淆、数据插值对齐等常见错误,并分享了基于MATLAB的自动化数据校验与可视化对比技巧,帮助建立可靠的实验数据分析SOP,确保DIC测量结果的准确性。

weixin_29313423的博客 115

php模板类,一个容易的模板类(PHP)

一个简单的模板类(PHP)接上话,有了一个数据操作类,这样项目只能简单地操作数据,但是要达到能够和美工一起显示美好的页面,则需要一个比较好的模板引擎。与SMARTY这样比较庞大的模板引擎相比,我想下面这个则真算得小得多了。这个模板类是我以前在网上看到的,写得比较好,所以我就引用了,还不知道作者是谁,这里就先讲一下这个类的原理。首先,这个类只有一个简单的正则解析器。但是基本上可以用到了。如果再能够在...

weixin_32552195的博客 393

在Ubuntu22.04.2远程服务器上搭建OHIF+Orthanc

在Ubuntu远程服务器上不翻墙,但是本地windows需要科学上网开始之前,首先在终端输入export -p查看是否有代理端口如下如果有就关了,输入如下命令。

weixin_51116549的博客 1340

php的底层模版引擎,PHP实现简易的模板引擎

PHP实现简易的模板引擎1.MVC简介MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式(详情自己百度):1. Model(模型)表示应用程序核心(比如数据库记录列表)。2. View(视图)显示数据(数据库记录)3. Controller(控制器)处理输入(写入数据库记录)。MVC的流程图如下(来源百度百科):2.本文重点...

weixin_36047538的博客 369

ZYNQ平台AXI DMA传输避坑指南:如何快速定位‘errors:200‘等中断故障

本文详细解析了ZYNQ平台AXI DMA传输中常见的'errors:200'等中断故障,提供了从寄存器解析到压力测试的完整解决方案。通过深入分析XILINX_DMA中断机制、错误分类及五步排查法,帮助开发者快速定位并解决DMA传输问题,提升系统稳定性与性能。

weixin_29159613的博客 441

多标签分类怎么做?(Python)

首先简单介绍下,多标签分类与多分类、多任务学习的关系: 多分类学习(Multi-class):分类器去划分的类别是多个的,但对于每一个样本只能有一个类别,类别间是互斥的。例如:分类器判断这只动物是猫、狗、猪,每个样本只能有一种类别,就是一个三分类任务。常用的做法是OVR、softmax多分类

y1282037271的博客 1359

php 模板编译类,一个简单的模板类--编译型的(simplet类增强后)

在上次发布的simplet类之后(http://bbs.phpchina.com/thread-85257-1-1.html),发现有很多缺陷,例如不支持多维数组,注释和没有缓存功能,这次我把这些功能都加进去了!!!大家有兴趣的话,我下次出个教程,来谈谈我写这个类的一些思想和方法!!!支持的话可以跟贴支持我!PHP代码:simplet.class.php", $content);$content ...

weixin_36313293的博客 193

Android定位权限全解析:从基础配置到后台持续定位的完整解决方案

本文全面解析Android定位权限体系,从基础配置到后台持续定位的完整解决方案。涵盖LocationManager和FusedLocationProviderClient等主流API的对比选型,详细讲解动态权限申请、精确定位与模糊定位的智能切换,以及Android 10+的后台定位适配策略。帮助开发者构建兼顾精准度与电量友好的定位方案,适用于导航、运动轨迹记录等多种场景。

weixin_29310605的博客 612

php模板类,一个简单的模板类(PHP)

有了一个数据操作类,这样项目只能简单地操作数据,但是要达到能够和美工一起显示美好的页面,则需要一个比较好的模板引擎。与SMARTY这样比较庞大的模板引擎相比,我想下面这个则真算得小得多了。这个模板类是我以前在网上看到的,写得比较好,所以我就引用了,还不知道作者是谁,这里就先讲一下这个类的原理。首先,这个类只有一个简单的正则解析器。但是基本上可以用到了。如果再能够在此基础上扩展,我相相信这个小东西很...

weixin_39849239的博客 226

浅谈MOS管的发热原因和解决办法

解读一下开关管发热原因,解决方案和开关损耗测试。

qq_45508321的博客 1万+

把 LangGraph 当“工作流引擎”用:与传统 BPM 的差异与融合策略

首先,我们来回顾一下有限状态机(FSM)的基本定义——一个 FSM 可以用一个五元组MQΣδq0FMQΣδq0​FQQQ有限状态集合,包含 FSM 所有可能的状态;Σ\SigmaΣ有限输入字母表,包含 FSM 所有可能的输入;δ\deltaδ状态转移函数,定义了 FSM 从当前状态q∈Qq \in Qq∈Q接收输入σ∈Σσ∈Σ后,转移到的下一个状态q′∈Qq' \in Qq′∈Q,即δQ×Σ→QδQ×Σ→Q。

AI 原生应用开发的博客 227

php模板初级教程,一个简单的模板类(PHP)_PHP教程

有了一个数据操作类,这样项目只能简单地操作数据,但是要达到能够和美工一起显示美好的页面,则需要一个比较好的模板引擎。与SMARTY这样比较庞大的模板引擎相比,我想下面这个则真算得小得多了。这个模板类是我以前在网上看到的,写得比较好,所以我就引用了,还不知道作者是谁,这里就先讲一下这个类的原理。首先,这个类只有一个简单的正则解析器。但是基本上可以用到了。如果再能够在此基础上扩展,我相相信这个小东西很...

weixin_33640562的博客 340

某瓜数据app 获取达人直播商品信息接口 Sign

某瓜数据app 获取达人直播商品列表接口 Sign

自成背后的博客 6039

php的简单模板类

我就喜欢简单:)// QuickTpl类,用于模板// lovered (GV) 于2004年4月11日创建 class QuickTpl {  var $filename; //模板文件  var $content; //返回内容  //初始化模板文件,将所有内容读入  function QuickTpl($tplfilename)  {   $this->filename=$tpl

海&火 1935

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

php 模板编译类,一个简单的模板类--编译型的(simplet类增强后)_PHP教程

在上次发布的simplet类之后(http://bbs.phpchina.com/thread-85257-1-1.html),发现有很多缺陷,例如不支持多维数组,注释和没有缓存功能,这次我把这些功能都加进去了!!!大家有兴趣的话,我下次出个教程,来谈谈我写这个类的一些思想和方法!!!支持的话可以跟贴支持我!PHP代码:simplet.class.php", $content);$content ...

weixin_28837357的博客 108

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

世界上最简单的模板,比Smarty,Xtemplate还要强大

class template { var $vars; function template() {  $this->vars = array(); } function render($content_template, $page_title, $wrap_file = , $nowrap = false) {  error_reporting(E_ALL ^ E_NOTICE); //

.NET博文收藏 286

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

php模板技术原理的理解

{subject} {subject} {content} 这个模板类初始化是直接读出 templete.html 所有字符 // 然后通过test.php对模板里的{}进行php执行

适之行的专栏 192

自定义模板php,简单的自定义php模板引擎

模板引擎的思想是来源于MVC(Model View Controller)模型,即模型层、视图层、控制器层。在Web端,模型层为数据库的操作;视图层就是模板,也就是Web前端;Controller就是PHP对数据和请求的各种操作。模板引擎就是为了将视图层和其他层分离开来,使php代码和html代码不会混杂在一起。因为当php代码和html代码混杂在一起时,将使代码的可读性变差,并且代码后期的维护会...

weixin_39902608的博客 111

第一个smarty小实例~~

第一个smarty小实例~~ 今天开始学习强大的smarty模版,完成了第一个smarty实例,如下: b.php:功能页面 //首先包含该模版文件 include("MyTpl.php"); //创建模版对象 $tpl=new MyTpl(); $title="smarty学习"; $content="smarty模版的介绍"; //分配变量 $tpl->assign("

zwt90的专栏 618

php 模板 {{}},PHP 模板技术!

PHP 模板技术!2008-06-26 19:34:04|分类: 默认分类|举报 |字号PHP模板类的原理很简单:类+模板替换。说到替换,我第一个想到的就是正则表达式。PHP里字符替换函数大部分都是基于正则的。所以,我个人认为,实现PHP模板类的原理是:类+正则表达式。写了第一个PHP模板类,功能简单得不能再简单了:cls.php -- 定义模板类/**************** cls...

weixin_39888018的博客 175

一个PHP Template

class Template {  var $classname = "Template";  /* if set, echo assignments */  var $debug     = false;  /* $file[handle] = "filename"; */  var $file  = array();  /* relati

朱朱的足迹 975

[原创] Lightemplate - php模版类

[Lightemplate]  Copyright (c) 2009 Troy  Class name: Lightemplate  Run environment on php5.*  Project owners and author Troy  Code license: GNU General Public License v3  Email list:  

坏孩子的天空 452
上一篇: PHP有用的MYSQL操作类(设计模式解读一)
下一篇: PHP框架开发一(首言)
tomyjohn
博客等级 码龄17年 26粉丝 48原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值