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