web程式設計師最常使用的資料庫封裝方式就是dao,其實和馬丁大爺在poeaa中所說的表資料入口差不多:
01 class articledao
02 07
08 public function findbytitle($title)
09
12 }
如上所示,是乙個最簡單的dao例子,為了提高效率,很多時候需要把查詢結果都快取起來:
01 class articlecache
02 11
12 public function findbyid($id)
13
19 return $result;
20 }
2122 public function findbytitle($title)
23
29 return $result;
30 }
31 }
3233 $memcache = new memcache();
34 $memcache->connect('host', 'port');
3536 $dao = new articledao();
3738 $cache = new articlecache($memcache, $dao);
3940 $cache->findbyid('id');
41 $cache->findbytitle('title');
解決問題時,物件導向程式設計不變的伎倆就是引入新層,上面這個快取功能的實現亦是如此,阿基公尺德當年叫嚷著:給我乙個支點,我可以撬動地球;物件導向的粉絲們也常有如此的豪言:加入乙個新層,就可以實現任何功能。不過這裡面出現了重複的壞味道,findbyid和findbytitle兩個方法的實現**大體上是重複的,繼續重構:
01 class cache
02 11
12 public function __call($name, $arguments)
13
1718 $key = md5(strtolower(get_class($this->dao) . $name . serialize($arguments)));
19 if (!($result = $this->cache->get($key, $flags)))
23 return $result;
24 }
25 }
2627 $memcache = new memcache();
28 $memcache->connect('host', 'port');
2930 $dao = new articledao();
3132 $cache = new cache($memcache, $dao);
3334 $cache->findbyid('id');
35 $cache->findbytitle('title');
通過使用魔術方法__call,我們成功的去除了重複**,而且這個cache可以說是「萬能」的,因為除了articledao外,我們可能還有categorydao,commentdao等等,都可以用這個cache來實現快取。當然,cache本身還不完善,有很多提公升的餘地,比如說快取時間的設定,或者內容更新時如何通過觀察者模式的方式來完成快取的主動更新等等,這些問題我就不得瑟了,留給讀者自己思考。
萬能密碼 php,PHP萬能密碼
說實話如果乙個 的前台都是注入漏洞,那麼憑經驗,萬能密碼進後台的機率基本上是百分之百。可是有的人說對php的站如果是gpc魔術轉換開啟,就會對特殊符號轉義,就徹底杜絕了php注入。其實說這話的人沒有好好想過,更沒有嘗試過用萬能密碼進php的後台。其實gpc魔術轉換是否開啟對用萬能密碼進後台一點影響也...
mysql萬能 Mysql的萬能優化方法
在命令列執行 1.檢視優化器狀態 show variable like optimizer trace 2.會話級別臨時開啟 set session optimizer trace enabled on end markers in json on 3.設定優化器追蹤的記憶體大小 set optim...
萬能的應用商店 WiFi萬能助手
許可權列表 wifi萬能助手 獲取定位 允許應用通過網路或衛星對裝置進行定位 獲取額外的位置資訊提供程式命令 獲取額外的位置資訊提供程式命令。惡意應用程式可藉此干擾 gps 或其他位置源的正常工作。檢視網路狀態 允許應用程式檢視所有網路的狀態。開關wlan 允許應用開啟或關閉wlan 作為帳戶身份驗...