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开发中常用的8个小技巧
Aug 27 PHP
php 生成饼图 三维饼图
Sep 28 PHP
PHP 程序员应该使用的10个组件
Oct 31 PHP
php中通过Ajax如何实现异步文件上传的代码实例
May 07 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
Jun 24 PHP
PHP中的socket_read和socket_recv区别详解
Feb 09 PHP
php用正则判断是否为数字的方法
Mar 25 PHP
thinkphp3.2实现上传图片的控制器方法
Apr 28 PHP
中高级PHP程序员应该掌握哪些技术?
Sep 23 PHP
详解PHP使用Redis存储session时的一个Warning定位
Jul 05 PHP
Laravel 集成 Geetest验证码的方法
May 14 PHP
PHP新手指南
Apr 01 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
15个小时----从修改程序到自己些程序
2006/10/09 PHP
建立动态的WML站点(二)
2006/10/09 PHP
php mysql数据库操作分页类
2008/06/04 PHP
关于PHP session 存储方式的详细介绍
2013/06/25 PHP
PHP static局部静态变量和全局静态变量总结
2014/03/02 PHP
PHP遍历XML文档所有节点的方法
2015/03/12 PHP
PHP从FLV文件获取视频预览图的方法
2015/03/12 PHP
php基于Snoopy解析网页html的方法
2015/07/09 PHP
PHP实现的随机IP函数【国内IP段】
2016/07/20 PHP
PHP7如何开启Opcode打造强悍性能详解
2018/05/11 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
javascript 控制 html元素 显示/隐藏实现代码
2009/09/01 Javascript
网络图片延迟加载实现代码 超越jquery控件
2010/03/27 Javascript
javascript处理table表格的代码
2010/12/06 Javascript
创建自己的jquery表格插件
2015/11/25 Javascript
canvas实现图像截取功能
2017/02/06 Javascript
解决vue项目报错webpackJsonp is not defined问题
2018/03/14 Javascript
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
python处理csv数据的方法
2015/03/11 Python
Python版名片管理系统
2018/11/30 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
python基于property()函数定义属性
2020/01/22 Python
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
使用HTML5和CSS3制作一个模态框的示例
2018/03/07 HTML / CSS
ProBikeKit德国:在线公路自行车专家
2018/06/03 全球购物
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
施华洛世奇波兰官网:SWAROVSKI波兰
2019/06/18 全球购物
总会计师岗位职责
2014/02/19 职场文书
《观舞记》教学反思
2014/04/16 职场文书
如何把新闻人物写得立体、鲜活?
2019/08/14 职场文书
写给医护人员的一封感谢信
2019/09/16 职场文书
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
2021/05/29 MySQL