ThinkPHP中_after_update、_before_update等的用法
https://blog.csdn.net/aslackers/article/details/50339163
TP系统\Think\Model类里隐藏了几个有用的方法:
_before_insert、_after_insert、_before_delete 、_after_delete、_before_update、_after_update、_after_select。。。。。。
但是在手册里并没有列出来,只有在源码中才能看到。新建个测试类ArticleModel.class.php
class ArticleModel extends Model { protected $article = ''; public function _initialize(){
$this->article = M('Article');
} public function updateArt($id = 0, $data = array()){
$this->article->where('id = ' . $id)->save($data);
} protected function _before_update(&$data,$options) {
$data['contents'] = 'ppppppp';
} protected function _after_update($data,$options) {
$this->article->add($data);
}
}
在控制器里调用 public function update() {
$id = 1;
$data['title'] = 'ttt';
D('Article')->updateArt($id,$data);
}
结果发现,_before_update和_after_update都没触发,但在系统的\Think\Model类里却能触发,手册中关于M方法和D方法,发现这句:M方法实例化的时候,默认情况下是直接实例化系统的\Think\Model类。而我平时在写自定义模型层时,习惯在模型层里先M一下自己,找到问题,修改自定义模型层: --------------------- 本文来自 aslackers 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/aslackers/article/details/50339163?utm_source=copy
class ArticleModel extends Model { public function updateArt($id = 0, $data = array()){
$this->where('id = ' . $id)->save($data);
} protected function _before_update(&$data,$options) {
$data['contents'] = 'ppppppp';
} protected function _after_update($data,$options) {
$this->add($data);
}
}
结果发现,_before_update和_after_update都没触发,但在系统的\Think\Model类里却能触发,手册中关于M方法和D方法,发现这句:M方引用TP手册中关于M方法和D方法的介绍,总结一下:
D方法可以自动检测模型类,如果存在自定义的模型类,则实例化自定义模型类,如果不存在,则会实例化系统的\Think\Model基类,同时对于已实例化过的模型,不会重复去实例化。
D方法实例化模型类的时候通常是实例化某个具体的模型类,如果你仅仅是对数据表进行基本的CURD操作的话,使用M方法实例化的话,由于不需要加载具体的模型类,所以性能会更高。
M方法实例化的时候,默认情况下是直接实例化系统的\Think\Model类。
---------------------
本文来自 aslackers 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/aslackers/article/details/50339163?utm_source=copy 法实例化的时候,默认情况下是直接实例化系统的\Think\Model类。而我平时在写自定义模型层时,习惯在模型层里先M一下自己,找到问题,修改自定义模型层: --------------------- 本文来自 aslackers 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/aslackers/article/details/50339163?utm_source=copy
法实例化的时候,默认情况下是直接实例化系统的\Think\Model类。而我平时在写自定义模型层时,习惯在模型层里先M一下自己,找到问题,修改自定义模型层: --------------------- 本文来自 aslackers 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/aslackers/article/details/50339163?utm_source=copy
ThinkPHP中_after_update、_before_update等的用法的更多相关文章
- Thinkphp中的内置标签用法
Thinkphp中的内置标签有:Volist,Foreach,For,Switch,比较标签,范围判断标签,IF,Present,Empty,Defined,Assign,Define,标签嵌套,im ...
- Thinkphp中import的几个用法详细介绍
下面附上import的几个用法介绍 1.用法一 import('@.Test.Translate');@,表示项目根目录.假定根目录是:App/导入类库的路径是:App/Lib/Test/Transl ...
- ThinkPHP中,display和assign用法详解
thinkphp 模板显示display和assign的用法 $this->assign('name',$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论 ...
- thinkphp中F方法
我们已经了解了ThinkPHP中的S方法的用法,F方法其实是S方法的一个子集功能,仅用于简单数据缓存,并且只能支持文件形式,不支持缓存有效期,因为采用的是PHP返回方式,所以其效率较S方法较高,因此我 ...
- Thinkphp中distinct的用法
Thinkphp中distincat的用法 TP中distinct()的用处主要是去除重复的值 在Thinkphp手册中也详细说明了(链接:http://document.thinkphp.cn/ma ...
- thinkphp中memcache的用法实例
本文实例讲述了thinkphp中memcache的用法.分享给大家供大家参考.具体分析如下: 1.下载并安装memcache ① window下安装memcache. 下载memcached.exe ...
- thinkPHP中session()方法用法详解
本文实例讲述了thinkPHP中session()方法用法.分享给大家供大家参考,具体如下: 系统提供了Session管理和操作的完善支持,全部操作可以通过一个内置的session函数完成. 用法 ? ...
- ThinkPHP中Session用法详解
在ThinkPHP封装了Session类,用户可以直接使用,常用的方法有: Session::set(name, value):注册 session . Session::is_set(name):检 ...
- [转]ThinkPHP中实例化对象M()和D()的区别,select和find的区别
1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会 ...
随机推荐
- Python中的urlparse、urllib抓取和解析网页(一)
对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过Python 语言提供的各种模块,我们无需借助Web服务器或者Web浏览 ...
- vue.js_07_vue-resource的请求方式
1.vue-resource 实现 get, post, jsonp请求 <body> <div id="app"> <input type=&quo ...
- JAVA开源微信管家平台——JeeWx捷微V3.3版本发布(支持微信公众号,微信企业号,支付窗)
JeeWx捷微V3.3版本紧跟微信小程序更新,在原有多触点版本基础上,引入了更多的新亮点:支持微信公众号.微信企业号.支付宝服务窗等多触点开发:采用微服务框架实现,可插拔可集成,轻量级开发:对小程序的 ...
- 【DM642学习笔记十】DSP优化记录
1. 处理的数据先EDMA到片内,具有更高的效率! 以YUV2RGB为例: #pragma DATA_SECTION(onchipBuf0_y,".INTPROCBUFF"); # ...
- Uva10795 A Different Task
A Different Task https://vjudge.net/problem/UVA-10795 题目大意:给定一个汉诺塔初末状态,求从初状态到末状态最少需要多少步. 考虑最大的一个初末不同 ...
- vue的事件绑定
vue事件有两方面内容:DOM事件 和 自定义事件. DOM事件 vue中采用DOM2级事件的处理方式,为IE9以上的浏览器服务.下面我们先来讲解一下什么是DOM2级事件吧! JS中DOM0级事件有两 ...
- web前端学习(一) j2ee环境搭配+jsp中的编码问题
jsp中的编码问题 pageEncoding是jsp文件本身的编码 contentType的charset是指服务器发送给客户端时的内容编码 我安装tomcat的方法是 安装j2ee的eclipse ...
- What every computer science major should know 每一个计算机科学专业的毕业生都应该都知道的
Given the expansive growth in the field, it's become challenging to discern what belongs in a modern ...
- 直接在安装了redis的Linux机器上操作redis数据存储类型--set类型
一.概述: 在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加.删除或判断某一元素是否存在等操作.需要说明的是,这些操作的时间复 ...
- INotitypropertyChanged
WPF数据绑定(要是后台类对象的属性值发生改变,通知在“client界面与之绑定的控件值”也发生改变须要实现INotitypropertyChanged接口) MainWindow.xaml < ...