ThinkPHP3.1.3版本新特性概述


Posted in PHP onJune 19, 2014

ThinkPHP3.1.3版本有一些特性,还是值得关注的,下面来简单说下。

1、异常方面的改进

新版的ThinkPHP3.1.3重写了异常类ThinkException(其实是完全简化成了直接继承系统Exception类),并且把异常逻辑改进封装到Think类中。主要涉及到Think类的appException方法和halt函数。
并且改进后的异常处理支持系统致命错误的捕获,Think类增加了fatalError方法,原理是使用了

register_shutdown_function(array('Think','fatalError'));

因此可以使得系统致命错误通过统一的异常模板界面友好提示。

2、对PDO参数绑定的支持

因为ThinkPHP3.*版本采用的是混合数据库驱动,同时也支持PDO方式,但之前版本并未针对PDO做优化,只是简单的封装。3.1.3版本完善了对PDO以及Sqlarv的支持,因为PDO和sqlsrv都支持参数绑定操作(注意,不支持参数绑定的数据库和驱动无法使用参数绑定功能)。

系统对参数绑定操作的支持分两种:自动绑定和手动绑定

自动绑定是对于写入操作(这里包括数据的新增和更新),框架会自动把相关数据转换成参数绑定方式执行,这个部分不需要额外处理,因为sqlsrv只有采用参数绑定的方式传值才能支持UTF8数据写入,但是每次写入数据都要采用手动参数绑定的话,就会显得比较麻烦。为了避免和手动参数绑定冲突,自动参数绑定采用的是对字段名md5编码的方式。

手动绑定,通常用于查询条件之类的,并且采用bind连贯操作方法,例如:

$model->where(array('id'=>':id','name'=>':name'))->bind(array(':id'=>$id,':name'=>$name))->select();

3、增加变量安全获取方法

之前版本通过Action类的_post _get等方法来安全获取变量,虽然没问题,但局限是只能在控制器中获取变量,新版把这一功能独立成一个快捷方法I,可以用于任何地方。
使用方法如下:

I('get.id',0); // 获取$_GET['id'] 如果不存在则默认为0
I('post.name','','htmlspecialchars'); // 获取$_POST['name'] 采用htmlspecialchars方法过滤
I('id'); // 获取id参数 自动判断get或者post
I('param.id'); // 获取id参数 自动判断get或者post 和上面用法等效
I('put.id'); // 获取put请求的id参数

还支持获取整个数组,例如:

I('get.'); // 获取$_GET数组
I('post.'); // 获取$_POST数组

在使用I方法的情况下,系统的VAR_FILTERS和DEFAULT_FILTER过滤配置依然有效。

4、where方法的多次调用

模型类的where方法可以支持数组方式的多次调用,例如:

$model->where(array('a'=>1,'c'=>2))->where(array('a'=>3,'b'=>1))->select();

多个where条件的时候,后面的条件会合并到前面的条件,最终的条件等效于:

$model->where(array('a'=>3,'b'=>1,'c'=>2))->select();

5、控制器中的assign方法支持连贯操作

我们可以在控制器使用:

$this->assign('name',$name)->assign('email',$email)->display();

或者:

$this->assign(array('name'=>$name,'email'=>$email))->display();
PHP 相关文章推荐
php使用百度天气接口示例
Apr 22 PHP
PHP资源管理框架Assetic简介
Jun 12 PHP
ThinkPHP模板自定义标签使用方法
Jun 26 PHP
ThinkPHP连接数据库及主从数据库的设置教程
Aug 22 PHP
php生成百度sitemap站点地图类函数实例
Oct 17 PHP
PHP正则验证Email的方法
Jun 15 PHP
php实现购物车功能(下)
Jan 05 PHP
Linux平台PHP5.4设置FPM线程数量的方法
Nov 09 PHP
PHP封装返回Ajax字符串和JSON数组的方法
Feb 17 PHP
php判断str字符串是否是xml格式数据的方法示例
Jul 26 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
Apr 10 PHP
PHP number_format函数原理及实例解析
Jul 14 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
Jun 19 #PHP
解密ThinkPHP3.1.2版本之模块和操作映射
Jun 19 #PHP
解密ThinkPHP3.1.2版本之模板继承
Jun 19 #PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
Jun 19 #PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
Jun 19 #PHP
php数组合并array_merge()函数使用注意事项
Jun 19 #PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 #PHP
You might like
php auth_http类库进行身份效验
2009/03/19 PHP
php学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
php实现在服务器端调整图片大小的方法
2015/06/16 PHP
如何使用纯PHP实现定时器任务(Timer)
2015/07/31 PHP
php轻松实现文件上传功能
2016/03/03 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
2016/10/14 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
javascript面向对象的方式实现的弹出层效果代码
2010/01/28 Javascript
JQuery select标签操作代码段
2010/05/16 Javascript
jQuery+ajax实现文章点赞功能的方法
2015/12/31 Javascript
JavaScript用构造函数如何获取变量的类型名
2016/12/23 Javascript
浅谈Node Inspector 代理实现
2017/10/19 Javascript
Angular路由ui-router配置详解
2018/08/01 Javascript
探秘vue-rx 2.0(推荐)
2018/09/21 Javascript
基于Vue SEO的四种方案(小结)
2019/07/01 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
JS异步处理的进化史深入讲解
2019/08/25 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
vue-resource:jsonp请求百度搜索的接口示例
2019/11/09 Javascript
jQuery实现点击滚动到指定元素上的方法分析
2020/03/19 jQuery
JavaScript中数组去重的5种方法
2020/07/04 Javascript
浅谈python中的变量默认是什么类型
2016/09/11 Python
对Python subprocess.Popen子进程管道阻塞详解
2018/10/29 Python
Python装饰器用法实例分析
2019/01/14 Python
Python3+Appium实现多台移动设备操作的方法
2019/07/05 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
Python使用tkinter实现摇骰子小游戏功能的代码
2020/07/02 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
2020/07/27 Python
乌克兰第一的珠宝网上商店:Gold.ua
2019/11/29 全球购物
大学军训感言1500字
2014/03/09 职场文书
幼儿园儿童节活动主持词+串词大全
2014/03/21 职场文书
餐饮投资计划书
2014/04/25 职场文书
应届毕业生求职信范文
2014/05/08 职场文书
交通事故被告答辩状
2015/05/22 职场文书
OpenCV项目实践之停车场车位实时检测
2022/04/11 Python