零基础入门PHP必学的Smarty模板引擎学习路线,了解一下?
ccwgpt 2024-10-05 14:12 24 浏览 0 评论
最近有不少小伙伴私信小编要Smarty的学习资料,今天技术学派就把Smarty相关的课堂讲义整理给小伙伴们,希望对小伙伴们在学习上有所帮助。
在实际的开发中,公司都是分工明确的,PHP程序员主要负责PHP代码也就是业务逻辑相关的部分,Web前端程序员主要负责的是HTML、CSS、JavaScript也就是让页面更加美观用户体验更好的部分,模板引擎就起到了模板(界面)与业务逻辑代码相分离的一种解决方案。
模板引擎原理示意图:
Html页面先使用占位符代替,然后模板引擎再从PHP文件读取真实数据,并最终生成一个编译文件,使用真实数据替换占位符
目前模板引擎技术有很多,Laravel框架(blade模板引擎)、ThinkPHP框架(自己的模板引擎技术),这里说一下Smarty,Smarty的简单介绍
一、过程化及框架开发对比
过程化开发因为是所有的代码HTML和PHP混排,功能升级会导致代码越来越臃肿很不方便,而且开发速度慢,但是,因为不需要像框架开发那样加载大批量的拓展类库,所以运行速度相对较快。
框架开发因为是采用特殊编程模式所以让我们更容易管理PHP代码和HTML代码。并且,各司其职,后台人员写后台功能;前端人员写前端效果,最后项目合并即可,所以开发速度很快。但是,因为需要加载第三方类库以及各种配置信息,所以运行效率会有所下降。
二、学习Smarty前的准备
因为在学习Smarty的时候,会使用到一些概念性的新内容,因此我们需要补充一些知识点。
1. 类型约束
主要针对于函数和类当中的成员方法,没有被约束的类时可以传递任何类型的信息到函数及方法中的
- 根据PHP版本的不同,能够约束的数据类型也各不相同:
版本可约束类型5.6及以下字符串、浮点型、数组型、对象型7.0及以上字符串、整型、浮点型、布尔型、数组型、对象型
2. 对象遍历
foreach除了可以遍历数组,也可以实现对象的遍历,它可以对对象中的公有成员属性进行遍历。
//定义一个类
class Meinv
{
public $name = '女神';
public $sex = '女';
public $age = '18';
}
?
//实例化对象
$gao = new Meinv();
?
//遍历该对象
foreach($gao as $k=>$v){
echo $k.'=>'.$v.'<br/>';
}
?
//输出结果
name=>女神
sex=>女
age=>18
3. 常用函数
在后续的文章中一些会用到的函数,我们提前整理成一个表供大家参考。
4. 魔术常量
PHP的自定义异常处理会应用到如下的几个魔术常量
5. 异常处理
PHP已经为我们准备了两个可以用于代码遇到异常时终止程序并提示错误信息的方法,它们分别为die和exit,但是这两种方法提示的异常信息过于简陋,而且无法实现一场信息的存储,因此PHP为我们准备了自定义异常处理类!Exception!
//语法格式
try{
//这里要尝试做一件事儿
if(...){
//若要抛出异常,可以使用如下语句
throw new Exception('错误信息','错误编号');
}
}catch(catch $e){ //这里做的错误信息的捕获
$e->getMessage(); //获取异常错误信息
$e->getCode(); //获取异常编号信息
$e->getFile(); //获取异常文件路径
$e->getLine(); //获取异常代码行号
}
三、更实用的数据库操作类 PDO
之前我们学习过MySQL数据库操作,使用了mysqli这一套数据库处理函数,虽然可以完成基本使用,但却有美中不足。PDO的出现可以帮我们完成跨数据库、支持SQL语句预处理及事务处理等功能。
PDO全称:php data object (php的数据库抽象层)
1. PDO的特点
- 跨数据库
- 支持预处理
- 支持事务处理
2. PDO的配置方式
- phpinfo查看pdo模块是否开启
- 在 wamp/bin/php/php7.0.10/ext 目录下查看是否拥有 php_pdo_mysql.dll 模块
- 在 php.ini 中搜索 extension=php_pdo_mysql.dll 是否开启(去掉前面的分号即可)
- 重启服务器
3. PDO的三种使用方式
3.1 基本使用
- 实例化PDO
- 发送SQL指令
- 处理返回结果
3.2 预处理使用
- 实例化对象
- 发送预处理指令
- 绑定参数
- 执行发送
- 处理结果
3.3 事务处理使用
- 确保表存储引擎为:innodb
- 修改表存储引擎:alter table 表名 engine=Innodb
- 开启事务处理:$pdo->beginTransaction()
- 事务回滚处理:$pdo->rollBack()
- 事物提交操作:$pdo->commit()
四、Smarty 模板引擎原理
在学习Smarty之前,还有最后的一部分内容需要我们准备一下,那就是模板引擎概念的剖析,下面的案例,我们将会把模板引擎的原理拆开揉碎讲解给大家,只有掌握模板引擎原理,才能在后续的Smarty、ThinkPHP及Laravel的使用中显得更加得心应手。
1. HTML&PHP 原生写法
就是将HTML和PHP写在一块的方法,这种写法解析速度快,却不易升级,因此现在很少会有公司使用原生写法搭建项目
2. 模板引擎写法
有了模板引擎之后,我们就可以让HTML和PHP各司其职了!HTML只负责显示内容,PHP只负责业务逻辑
五、Smarty模板引擎
通过上面的学习,大家已经掌握了模板引擎的使用原理,下面,我们就可以轻松的来使用Smarty模板引擎来实现一些基本使用了
1. 定义
Smarty模版引擎是一个开源引擎,是为了使用户界面(HTML)与业务数据(PHP)分离而产生的,它可以生成特定格式的文档,用于网站的模版引擎就会生成一个标准的HTML文档。直接在 http://www.smarty.net 官网进行下载即可
2. 功能
- HTML和PHP代码分离
- 实现代码编译与静态缓存
3. 使用步骤
- 引入Smarty类文件
- 实例化Smarty类
- 初始化参数
- 分配变量
- 解析模板
3.1 引入Smarty类文件
- 需要将Libs目录中的Smarty.class.php文件引入
- include "./Libs/Smarty.php";
3.2 实例化Smarty类
- $s = new Smarty;
3.3 初始化参数
这里初始化的参数的作用是为了我们后续模板引擎使用的一些设置,包含了诸如:模板文件存储位置、编译缓存文件存储位置、配置文件存储位置等设置内容。
//设置模板文件存储目录
$s->template_dir = './Views';
?
//设置编译缓存文件存储目录
$s->compile_dir = './Views_c';
?
//设置配置文件存储目录
$s->config_dir = './config';
?
//设置左定界符
$s->left_delimiter = '<{';
?
//设置右定界符
$s->right_delimiter = '}>';
?
//是否开启静态缓存
$s->caching = true;
?
//设置静态缓存存储目录
$s->cache_dir = './cache';
?
//设置静态缓存生存更新时间(单位:秒)
$s->cache_lifetime = 5;
3.4 分配变量
这里分配的变量,就是模板文件中要进行使用的模板变量
//压入信息
$s->assign('title','smarty的基本使用');
$s->assign('version','3.1.18');
$s->assign('time',time());
$s->assign('chifan',true); //显示1,false为空字符串
$s->assign('pie',3.1415926); //浮点
$s->assign('active',['睡觉','敲代码','吃饭','上网']);
3.5 解析模板
这里的解析模板和我们自定义 MySmarty 中的display方法使用时一致的。
//将信息解析到模板上
$s->display('1.html');
下面为模板文件内容
<!DOCTYPE html>
<htmL>
<head>
<meta charset='utf-8'/>
<title>{$title}</title>
</head>
<body>
当前的版本:{$version}<br/>
当前的时间戳:{$time}<br/>
您吃饭了吗:{$chifan}<br/>
π:{$pie}<br/>
活动:{$active[0]}----{$active[1]----{$active[2]}}<br/> //使用方式同数组一致
</body>
</htmL>
4. 分配变量
本节要详细来看一下Smarty可以分配的变量有哪些内容
4.1 普通变量
4.2 超全局变量
4.3 保留变量
5. 解析模板
本节主要来了解在模板当中,我们可以使用那些技巧,输出那些内容。
6. 内置函数
本节向大家展示内置函数的使用方式,常用的有if分支、for循环、foreach遍历
6.1 for循环
//简单的{for}循环
<ul>
{for $foo=1 to 3 step 2}
<li>{$foo}</li>
{/for}
</ul>
上例输出:
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
6.2 foreach遍历
//{foreach}循环的简单例子
$arr = array('red', 'green', 'blue');
$smarty->assign('myColors', $arr);
模板在无序li中输出$myColors
<ul>
{foreach $myColors as $color}
<li>{$color}</li>
{/foreach}
</ul>
?
上例输出:
<ul>
<li>red</li>
<li>green</li>
<li>blue</li>
</ul>
6.3 if分支
{* 同上 *}
{if $name == 'Fred' || $name == 'Wilma'}
...
{/if}
?
{* 允许使用圆括号 *}
{if ( $amount < 0 or $amount > 1000 ) and $volume >= #minVolAmt#}
...
{/if}
{* 可以嵌入函数 *}
{if count($var) gt 0}
...
{/if}
{* 数组检查 *}
{if is_array($foo) }
.....
{/if}
{* 是否空值检查 *}
{if isset($foo) }
.....
{/if}
为了帮助小伙伴们更好的学习PHP Smarty ,技术学派整理了Smarty的相关demo源码及学习路线图,免费发给大家。
领取方式
关注“技术学派”后,评论转发文章,私信回复:Smarty
相关推荐
- 十分钟让你学会LNMP架构负载均衡(impala负载均衡)
-
业务架构、应用架构、数据架构和技术架构一、几个基本概念1、pv值pv值(pageviews):页面的浏览量概念:一个网站的所有页面,在一天内,被浏览的总次数。(大型网站通常是上千万的级别)2、u...
- AGV仓储机器人调度系统架构(agv物流机器人)
-
系统架构层次划分采用分层模块化设计,分为以下五层:1.1用户接口层功能:提供人机交互界面(Web/桌面端),支持任务下发、实时监控、数据可视化和报警管理。模块:任务管理面板:接收订单(如拣货、...
- 远程热部署在美团的落地实践(远程热点是什么意思)
-
Sonic是美团内部研发设计的一款用于热部署的IDEA插件,本文其实现原理及落地的一些技术细节。在阅读本文之前,建议大家先熟悉一下Spring源码、SpringMVC源码、SpringBoot...
- springboot搭建xxl-job(分布式任务调度系统)
-
一、部署xxl-job服务端下载xxl-job源码:https://gitee.com/xuxueli0323/xxl-job二、导入项目、创建xxl_job数据库、修改配置文件为自己的数据库三、启动...
- 大模型:使用vLLM和Ray分布式部署推理应用
-
一、vLLM:面向大模型的高效推理框架1.核心特点专为推理优化:专注于大模型(如GPT-3、LLaMA)的高吞吐量、低延迟推理。关键技术:PagedAttention:类似操作系统内存分页管理,将K...
- 国产开源之光【分布式工作流调度系统】:DolphinScheduler
-
DolphinScheduler是一个开源的分布式工作流调度系统,旨在帮助用户以可靠、高效和可扩展的方式管理和调度大规模的数据处理工作流。它支持以图形化方式定义和管理工作流,提供了丰富的调度功能和监控...
- 简单可靠高效的分布式任务队列系统
-
#记录我的2024#大家好,又见面了,我是GitHub精选君!背景介绍在系统访问量逐渐增大,高并发、分布式系统成为了企业技术架构升级的必由之路。在这样的背景下,异步任务队列扮演着至关重要的角色,...
- 虚拟服务器之间如何分布式运行?(虚拟服务器部署)
-
在云计算和虚拟化技术快速发展的今天,传统“单机单任务”的服务器架构早已难以满足现代业务对高并发、高可用、弹性伸缩和容错容灾的严苛要求。分布式系统应运而生,并成为支撑各类互联网平台、企业信息系统和A...
- 一文掌握 XXL-Job 的 6 大核心组件
-
XXL-Job是一个分布式任务调度平台,其核心组件主要包括以下部分,各组件相互协作实现高效的任务调度与管理:1.调度注册中心(RegistryCenter)作用:负责管理调度器(Schedule...
- 京东大佬问我,SpringBoot中如何做延迟队列?单机与分布式如何做?
-
京东大佬问我,SpringBoot中如何做延迟队列?单机如何做?分布式如何做呢?并给出案例与代码分析。嗯,用户问的是在SpringBoot中如何实现延迟队列,单机和分布式环境下分别怎么做。这个问题其实...
- 企业级项目组件选型(一)分布式任务调度平台
-
官网地址:https://www.xuxueli.com/xxl-job/能力介绍架构图安全性为提升系统安全性,调度中心和执行器进行安全性校验,双方AccessToken匹配才允许通讯;调度中心和执...
- python多进程的分布式任务调度应用场景及示例
-
多进程的分布式任务调度可以应用于以下场景:分布式爬虫:importmultiprocessingimportrequestsdefcrawl(url):response=re...
- SpringBoot整合ElasticJob实现分布式任务调度
-
介绍ElasticJob是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目ElasticJob-Lite和ElasticJob-Cloud组成。它通过弹性调度、资源管控、...
- 分布式可视化 DAG 任务调度系统 Taier 的整体流程分析
-
Taier作为袋鼠云的开源项目之一,是一个分布式可视化的DAG任务调度系统。旨在降低ETL开发成本,提高大数据平台稳定性,让大数据开发人员可以在Taier直接进行业务逻辑的开发,而不用关...
- SpringBoot任务调度:@Scheduled与TaskExecutor全面解析
-
一、任务调度基础概念1.1什么是任务调度任务调度是指按照预定的时间计划或特定条件自动执行任务的过程。在现代应用开发中,任务调度扮演着至关重要的角色,它使得开发者能够自动化处理周期性任务、定时任务和异...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)