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 抽象类的简单应用
Sep 06 PHP
php数字转汉字代码(算法)
Oct 08 PHP
php preg_replace替换实例讲解
Nov 04 PHP
php上传图片生成缩略图(GD库)
Jan 06 PHP
PHP对象克隆clone用法示例
Sep 28 PHP
PHP与SQL语句常用大全
Dec 10 PHP
php分页查询的简单实现代码
Mar 14 PHP
利用php-cli和任务计划实现刷新token功能的方法
May 03 PHP
CakePHP框架Model函数定义方法示例
Aug 04 PHP
laravel ORM 只开启created_at的几种方法总结
Jan 29 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
Oct 14 PHP
ThinkPHP 5.1 跨域配置方法
Oct 11 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新手NOTICE错误常见解决方法
2011/12/07 PHP
PHP实现的MongoDB数据库操作类分享
2014/05/12 PHP
Php连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
PHP类与对象后期静态绑定操作实例详解
2018/12/20 PHP
php输出反斜杠的实例方法
2019/09/19 PHP
js实现的网页颜色代码表全集
2007/07/17 Javascript
原生js实现跨浏览器获取鼠标按键的值
2013/04/08 Javascript
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
jQuery获取上传文件的名称的正则表达式
2015/05/21 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
BootStrap入门教程(二)之固定的内置样式
2016/09/19 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
Vue动态路由缓存不相互影响的解决办法
2019/02/19 Javascript
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
[01:00:53]OG vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
浅谈关于Python3中venv虚拟环境
2018/08/01 Python
python爬虫 Pyppeteer使用方法解析
2019/09/28 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
Python 2.6.6升级到Python2.7.15的详细步骤
2020/12/14 Python
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
2012/12/10 HTML / CSS
HTML5 Canvas中使用用路径描画圆弧
2015/01/01 HTML / CSS
国际化的太阳镜及太阳镜配件零售商:Sunglass Hut
2016/07/26 全球购物
Snapfish英国:在线照片打印和个性化照片礼品
2017/01/13 全球购物
优秀生推荐信范文
2013/11/28 职场文书
生产内勤岗位职责
2013/12/07 职场文书
大专会计自我鉴定
2014/02/06 职场文书
精神病医院见习报告
2014/11/03 职场文书
巾帼标兵事迹材料
2014/12/26 职场文书
CSS3常见动画的实现方式
2021/04/14 HTML / CSS
纯html+css实现Element loading效果
2021/08/02 HTML / CSS