最近有不少小伙伴私信小编要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.\’
’;}
//输出结果
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’);
下面为模板文件内容
{$title} 当前的版本:{$version}
当前的时间戳:{$time}
您吃饭了吗:{$chifan}
π:{$pie}
活动:{$active[0]}—-{$active[1]—-{$active[2]}}
//使用方式同数组一致
4. 分配变量
本节要详细来看一下Smarty可以分配的变量有哪些内容
4.1 普通变量
4.2 超全局变量
4.3 保留变量
5. 解析模板
本节主要来了解在模板当中,我们可以使用那些技巧,输出那些内容。
6. 内置函数
本节向大家展示内置函数的使用方式,常用的有if分支、for循环、foreach遍历
6.1 for循环
//简单的{for}循环
{for $foo=1 to 3 step 2}
- {$foo}
{/for}
上例输出:
- 1
- 2
- 3
6.2 foreach遍历
//{foreach}循环的简单例子
$arr = array(‘red’, ‘green’, ‘blue’);
$smarty->assign(‘myColors’, $arr);
模板在无序li中输出$myColors
{foreach $myColors as $color}
- {$color}
{/foreach}
上例输出:
- red
- green
- blue
6.3 if分支
{* 同上 *}
{if $name == ‘Fred’ || $name == ‘Wilma’}
…
{/if}
{* 允许使用圆括号 *}
{if ( $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源码及学习路线图,免费发给大家。