摘要:前言我一生的文章都會放在這里,我的博客,我希望每一行代碼,每一段文字都能幫助你。大家好,我是,今天我們不聊工具規范等等等等的輔助,就聊一下該如何寫一段好的代碼,本文以我的職業生涯碰到的代碼為例,如有出入請在評論區提出異議,謝謝。
前言
我一生的文章都會放在這里,我的博客,我希望每一行代碼,每一段文字都能幫助你。https://github.com/CrazyCodes...
大家好,我是CrazyCodes ,今天我們不聊工具、規范等等等等的輔助,就聊一下該如何寫一段“好”的代碼,本文以我的職業生涯碰到的代碼為例,如有出入請在評論區提出異議,謝謝。
搜索功能搜索很常見,復雜的搜索大多出行在后臺,舉個栗子,大概需求是這樣的
這是一個后臺用戶列表的搜索功能
搜索條件 | 可否并行 | 是否必填 |
---|---|---|
用戶名 | 可以 | 否 |
手機號碼 | 可以 | 否 |
是否已認證 | 可以 | 是 |
用戶性別 | 可以 | 否 |
最近登錄時間 | 可以 | 否 |
賬戶余額 | 可以 | 否 |
看到這些例子你是否不由的一顫,又要開始造輪子的是不是?
以原生的例子為例,開始你可能會這樣寫(以下為偽代碼)
if (IS_POST) { $like = ""; if (isset($_POST["username"])) { $username = $_POST["username"]; $like .= "username like "%" . $username . "%" and "; } if (isset($_POST["phone"])) { $phone = $_POST["phone"]; $like .= "phone like "%" . $phone . "%" and"; } if ($_POST["is_auth"]) { $isAuth = $_POST["is_auth"]; $like .= "is_auth like "%" . $isAuth . "%" and"; } if ($_POST["sex"]) { $sex = $_POST["sex"]; $like .= "sex like "%" . $sex . "%" and"; } if ($_POST["time"]) { $time = $_POST["time"]; $like .= "time like "%" . $time . "%" and"; } if ($_POST["wallet"]) { $wallet = $_POST["wallet"]; $like .= "wallet like "%" . $wallet . "%" and"; } $like = rtrim($like, "and"); $sql = "SELECT * FROM `user` WHERE {$like}"; } else { return view("user"); }封裝
恩...,還不錯,結構清晰,傳統的初學者條型代碼,接下來我們先封裝一下幾塊代碼。
function post($param) { return isset($_POST[$param]) ? $_POST[$param] : null; } if (IS_POST) { $like = ""; if (post("username")) { $username = post("username"); $like .= "username like "%" . $username . "%" and "; } if (post("phone")) { $phone = post("phone"); $like .= "phone like "%" . $phone . "%" and"; } if (post("is_auth")) { $isAuth = post("is_auth"); $like .= "is_auth like "%" . $isAuth . "%" and"; } if (post("sex")) { $sex = post("sex"); $like .= "sex like "%" . $sex . "%" and"; } if (post("time")) { $time = post("time"); $like .= "time like "%" . $time . "%" and"; } if (post("wallet")) { $wallet = post("wallet"); $like .= "wallet like "%" . $wallet . "%" and"; } $like = rtrim($like, "and"); $sql = "SELECT * FROM `user` WHERE {$like}"; } else { return view("user"); }適當使用迭代
恩,至少我們可以自由控制post方法了,但是這類過程化代碼維護性太低,我們再改進下
function post($param) { return isset($_POST[$param]) ? $_POST[$param] : false; } function postAll() { return $_POST; } if (IS_POST) { $like = ""; foreach (postAll() as $key => $value) { if (post($key)) { $like .= "{$key} like "%{$value}%" and"; } } $like = rtrim($like, "and"); $sql = "SELECT * FROM `user` WHERE {$like}"; } else { return view("user"); }面向對象
加個迭代代碼看起來還算是整潔了點,作為PHP程序員,寫代碼不面向對象不靠譜,把class加上
function request($param = null) { return new Request($param); } class Request { public function __construct(string $param = null) { return isset($_POST[$param]) ? $_POST[$param] : false; } public function all() { return $_POST; } } class User { public function index() { if (IS_POST) { $like = ""; foreach (request()->all() as $key => $value) { if (request($key)) { $like .= "{$key} like "%{$value}%" and"; } } $like = rtrim($like, "and"); $sql = "SELECT * FROM `user` WHERE {$like}"; } else { return view("user"); } } }對User的改造
我們在對User的類進行改造,做一些判斷及篩選
function request($param = null) { return new Request($param); } class Request { public function __construct(string $param = null) { return isset($_POST[$param]) ? $_POST[$param] : false; } public function all() { return $_POST; } } class User { public $request = [ "username", "phone", "is_auth", "sex", "time", "wallet" ]; public function index() { if (IS_POST) { $like = ""; foreach (request()->all() as $key => $value) { if (in_array($key, $this->request) && request($key)) { $like .= sprintf("%s like %s and", $key, $value); } } $like = rtrim($like, "and"); $sql = "SELECT * FROM `user` WHERE {$like}"; } else { return view("user"); } } }
這就差不多了,對比真是的代碼可能還相差甚遠,我寫這篇文章的目的不是教會你如何寫代碼,是想說明編碼不是一次性的,應經過多次修改,使代碼具有可維護性,擴展性等等的,各種“性”
致謝感謝你看到這里,希望本篇文章可以幫到你,謝謝
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31573.html
摘要:如何才能成為一名專業的開發者資深開發者在其博客上分享了一些心得。要想成為一個專業的程序員,首先要成為一個中級程序員。永遠不要低估陪伴的力量結論當你專注于實踐上面所提到各種方法的時候,你就在成為專業開發者的路上。 如何才能成為一名專業的PHP開發者?資深Web開發者Bruno Skvorc在其博客上分享了一些心得。 showImg(http://segmentfault.com/img...
摘要:從試著改進可重用做起泊學視頻回想起每次更新泊學網站,最讓我頭疼的,就是改寫。于是我幾乎不假思索的寫出了這樣的模板它同樣包含了一個封面圖,一個標題和一個簡介。 從試著改進可重用CSS做起 泊學4K視頻 回想起每次更新泊學網站,最讓我頭疼的,就是改寫CSS。在不同的階段,對CSS不斷深入的理解,對網站內容的調整,對UI的重用需求,都影響著CSS的編寫方式,因此,稍不留神,你的代碼理解就會充...
摘要:語言行為及特征狀態看不懂任何英語技術,英語文檔,凡事沒有培訓部在搞的,只有英文文檔的東西國內一律沒大公司在用,都非主流,排斥英文文檔和新技術,以及各種超出他學習能力范圍的技術。 在撰寫此文前首先必須申明的是本人不鄙視任何一種框架,也無意于挑起PHP框架間的戰爭,更沒有貶低某個框架使用者的用意,本文純粹個人的看法。你可以認為我無知也好,或者裝逼也好,請不要試著在任何情況下,隨便發起言語的...
閱讀 917·2021-11-08 13:22
閱讀 2841·2021-09-29 09:45
閱讀 2824·2021-09-09 11:52
閱讀 2257·2019-08-30 13:20
閱讀 3740·2019-08-29 13:28
閱讀 1356·2019-08-29 12:32
閱讀 2720·2019-08-29 11:10
閱讀 1644·2019-08-26 13:34