抽離CodeIgniter的資料庫訪問類

2021-12-30 00:34:08 字數 1518 閱讀 5197

好吧,因為組織需要,最近又開始轉戰php了,業務邏輯都還好說,主要是老大要求在資料訪問層上加上登入態驗證。

其實這種要求也是合理的,網際網路服務要求上層保護下層,但下層不能完全相信上層。但是問題也就來了,有如下兩種方案:

1.寫乙個mysql proxy server,用來將呼叫方發來的請求拼裝,然後返回給呼叫側。這樣做的主要難度在於:

a)sql語句的拼裝及序列化

b)資料集序列化,雖然有不少這方面的產品,但是終究還是太過複雜,而且沒有時間折騰

果斷放棄。

2.封裝一層mysql的api,呼叫方直接在本地呼叫即可。這樣的話,只需要考慮sql語句的拼裝即可。現在就有很多選擇啦,

a)使用類似django裡面model的模型類

b)使用ci中的active record

雖然說model的方式,對資料層的遮蔽較好,但是小組成員普遍認為這種方式過重,輕量的一點的話,最終還是選擇了codeigniter中的ar。

ok,那麼現在,考驗ci模組拆分的好不好的時候到啦!

具體中間的種種辛苦就不說啦,直說我最終的實現把,拷貝system\database到乙個單獨的目錄,x:/php/ 。

建立乙個檔案myconfig.php:

<?php

define('basepath', dirname(__file__).'/');

define('ext', '.php');

require_once(basepath . 'database/db' . ext);

function &instantiate_class(&$class_object)  

function log_message($level = 'error', $message, $php_error = false)

function mydb()

?>

建立乙個測試檔案test.php:

<?php

require_once('myconfig.php');

$db = mydb();

$db->select('id,user_login,user_email');

$query = $db->get('wp_users');

echo "\n";

foreach ($query->result() as $row)

?>

輸入結果如下:

database driver class initialized

1 admin

[email protected]

ok啦~~~ 這樣我們如果要在資料訪問前需要做許可權校驗的話,只需要在mydb函式中做判斷即可。

另外,不得不說ci模組拆分的確實不錯,instantiate_class是來自於它的system\codeigniter\common.php。 log_message我給重寫了一下,因為對於每個呼叫者來說,希望寫log的方式是不一樣的。(比如我這次就直接列印在了螢幕上。。。。),最近正好 在看設計模式,這種方式也是符合模版方法模式的。

作者「wolf的個人空間」

抽離樣式模組

各個瀏覽器之間樣式相容性不同,預設的樣式值有所不同,如果沒有初始化對應的css,那麼最終執行的專案會在不同瀏覽器之間的表現有所不同,所以會對專案中標籤進行初始化設定 最常見的就是設定萬用字元 缺點是會遍歷所有的標籤屬性,嚴重影響效能 可以對具體標籤具體設定 body,h1,h2,h3,h4,h5,h...

python tornado 專案框架抽離

1,主函式入口 venv bin python3 全域性變數字典 tornado.options.define global dict type dict,default multiple true tornado.options.parse command line server.bind 888...

抽離止損 做自己

兩性關係學習心得 無論你多麼愛乙個人,也不能放棄做自己,當你放棄做自己的那一刻,你已經不特別了。兩個人從陌生到熟悉,再到最好在一起,並不是一成不變的,而是肯定會變的,當你們從朋友變成情侶的那一刻,你就應該明白,你要不斷的變成更好的自己,而不是說你已經吃定他了。很多女孩子便是如此,被男孩子追的時候,很...