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 调用远程url的六种方法小结
Nov 02 PHP
PHP 登录记住密码实现思路
May 07 PHP
PHP中使用json数据格式定义字面量对象的方法
Aug 20 PHP
使用GD库生成带阴影文字的图片
Mar 27 PHP
PHP输出缓冲控制Output Control系列函数详解
Jul 02 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
Mar 23 PHP
php 魔术常量详解及实例代码
Dec 04 PHP
PHP回调函数与匿名函数实例详解
Aug 16 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
PHP给源代码加密的几种方法汇总(推荐)
Feb 06 PHP
php格式文件打开的四种方法
Feb 24 PHP
PHP通过get方法获得form表单数据方法总结
Sep 12 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的安全策略
2006/10/09 PHP
PHP常用代码大全(新手入门必备)
2010/06/29 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
2013/06/21 PHP
php5.5中类级别的常量使用介绍
2013/10/02 PHP
thinkphp缓存技术详解
2014/12/09 PHP
PHP rsa加密解密使用方法
2015/04/27 PHP
PHP实现获取中英文首字母
2015/06/19 PHP
PHP实现的文件操作类及文件下载功能示例
2016/12/24 PHP
CI(CodeIgniter)框架视图中加载视图的方法
2017/03/24 PHP
jquery 最简单易用的表单验证插件
2010/02/27 Javascript
JSON 教程 json入门学习笔记
2020/09/22 Javascript
使用Jquery打造最佳用户体验的登录页面的实现代码
2011/07/08 Javascript
jquery通过a标签删除table中的一行的代码
2013/12/02 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
js简单的点击返回顶部效果实现方法
2015/04/10 Javascript
JS代码实现百度地图 画圆 删除标注
2016/10/12 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
2017/10/20 Javascript
JS实现键值对遍历json数组功能示例
2018/05/30 Javascript
微信小程序form表单组件示例代码
2018/07/15 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
微信小程序数据统计和错误统计的实现方法
2019/06/26 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
Python调用adb命令实现对多台设备同时进行reboot的方法
2018/10/15 Python
Python中is和==的区别详解
2018/11/15 Python
Python完成毫秒级抢淘宝大单功能
2019/06/06 Python
Python如何在循环内使用list.remove()
2020/06/01 Python
Python CSS选择器爬取京东网商品信息过程解析
2020/06/01 Python
Overload和Override的区别
2012/09/02 面试题
电气自动化专业职业规划范文
2014/02/16 职场文书
社区精神文明建设汇报材料
2014/08/17 职场文书
2016国培研修心得体会
2016/01/08 职场文书
《最后一头战象》读后感:动物也有感情
2020/01/02 职场文书
Qt自定义Plot实现曲线绘制的详细过程
2021/11/02 Python