如果執行資料更新,ci框架一般都是如此呼叫$this->db->update,這是如何實現的呢
ci框架的db->update
print_r($this->db),知道了他的細節,他的名字,屬性,
然後在系統資料夾中找到了這個類檔案,
發現並沒有update這個方法
去他的父類中尋找
然而並沒有發現ci_db這個檔案
在db.php中發現了這樣的**:
i. 這個**,定義了ci_db,雖然類內什麼都沒有,但是它繼承了ci_db_active_record或者ci_db_driver,至於根據什麼判斷去繼承,日後研究
ii. 而db.php早已經在呼叫$this->db->update之前載入好了
iii. 在本專案中,是走上者的,即繼承了ci_db_active_record
7.去檢視ci_db_active_rec.php並找到了update方法
9.在update方法中,對需要update的資料$set進行處理
10.去看set方法,
b) 這是把每一項需要修改的資料通過escape方法處理後,放到ar_set屬性中
c) 去找escape方法,它在父類ci_db_driver中,
e) 看到此方法中是呼叫escape_str方法進行的處理
f) 然後總是想當然的認為此方法就在父類ci_db_driver裡
g) 可是父類ci_db_driver並沒有此方法,而且並沒有繼承任何類
h) 當時就找啊找,總以為用了類似於__call之類的方法,或者我沒有接觸過的方法
i) 後來,捋一捋繼承順序
i. ci_db_mysql_driver extends ci_db(escape_str在ci_db_mysql中)
ii. class ci_db extends ci_db_active_record
iii. class ci_db_active_record extends ci_db_driver(ci_db_driver::escape方法裡呼叫了ci_db_mysql:: escape_str)
j) 終於明白了,這個escape方法,只能在建立ci_db_mysql_driver的例項的時候,才能呼叫內部的escape_str
舉個簡單的例子,下圖父類中的fathermethod方法,只有在子類child去呼叫時,才不會出錯,因為fathermethod方法呼叫了在子類內部才定義的方法
對一次ARP欺騙分析
一 實驗目的 二 實驗內容 通過科來資料報生成器在a主機上偽造乙個arp資料報,並傳送出去,將b主機的閘道器mac位址的快取修改為a的mac位址。三 實驗用到的工具 wireshark 科來資料報生成器 若是在win7 8上還需要科來資料報 器來發包 科來資料報生成器在win7 8上無法使用發包功能...
對udp dns的一次思考
目前昨天查乙個線上問題 dns伺服器在我們的裝置,有大量的終端到裝置上請求解析網域名稱,但是一直是單執行緒,dns報文處理不過來 然而裝置是多核,dns伺服器一直不能利用多核資源,所以能不能使用多執行緒進行處理呢?udp不像tcp那樣,udp沒有連線的概念,也就是沒有通過建立多個連線來提高對dns伺...
對一次ARP欺騙分析
一次arp欺騙 一 實驗目的 學習使用科來資料報生成器構造乙個資料報 通過一次arp實驗,分析arp報文格式 二 實驗內容 通過科來資料報生成器在a主機上偽造乙個arp資料報,並傳送出去,將b主機的閘道器mac位址的快取修改為a的mac位址。三 實驗用到的工具 四 實驗平台 本次實驗我是在虛擬機器裡...