摘要:前言我一生的文章都會放在這里,我的博客,我希望每一行代碼,每一段文字都能幫助你。大家好,我是,今天我們不聊工具規(guī)范等等等等的輔助,就聊一下該如何寫一段好的代碼,本文以我的職業(yè)生涯碰到的代碼為例,如有出入請在評論區(qū)提出異議,謝謝。
前言
我一生的文章都會放在這里,我的博客,我希望每一行代碼,每一段文字都能幫助你。https://github.com/CrazyCodes...
大家好,我是CrazyCodes ,今天我們不聊工具、規(guī)范等等等等的輔助,就聊一下該如何寫一段“好”的代碼,本文以我的職業(yè)生涯碰到的代碼為例,如有出入請在評論區(qū)提出異議,謝謝。
搜索功能搜索很常見,復雜的搜索大多出行在后臺,舉個栗子,大概需求是這樣的
這是一個后臺用戶列表的搜索功能
搜索條件 | 可否并行 | 是否必填 |
---|---|---|
用戶名 | 可以 | 否 |
手機號碼 | 可以 | 否 |
是否已認證 | 可以 | 是 |
用戶性別 | 可以 | 否 |
最近登錄時間 | 可以 | 否 |
賬戶余額 | 可以 | 否 |
看到這些例子你是否不由的一顫,又要開始造輪子的是不是?
以原生的例子為例,開始你可能會這樣寫(以下為偽代碼)
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"); }封裝
恩...,還不錯,結(jié)構(gòu)清晰,傳統(tǒng)的初學者條型代碼,接下來我們先封裝一下幾塊代碼。
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"); }面向?qū)ο?/b>
加個迭代代碼看起來還算是整潔了點,作為PHP程序員,寫代碼不面向?qū)ο蟛豢孔V,把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"); } } }
這就差不多了,對比真是的代碼可能還相差甚遠,我寫這篇文章的目的不是教會你如何寫代碼,是想說明編碼不是一次性的,應經(jīng)過多次修改,使代碼具有可維護性,擴展性等等的,各種“性”
致謝感謝你看到這里,希望本篇文章可以幫到你,謝謝
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/31573.html
摘要:如何才能成為一名專業(yè)的開發(fā)者資深開發(fā)者在其博客上分享了一些心得。要想成為一個專業(yè)的程序員,首先要成為一個中級程序員。永遠不要低估陪伴的力量結(jié)論當你專注于實踐上面所提到各種方法的時候,你就在成為專業(yè)開發(fā)者的路上。 如何才能成為一名專業(yè)的PHP開發(fā)者?資深Web開發(fā)者Bruno Skvorc在其博客上分享了一些心得。 showImg(http://segmentfault.com/img...
摘要:從試著改進可重用做起泊學視頻回想起每次更新泊學網(wǎng)站,最讓我頭疼的,就是改寫。于是我?guī)缀醪患偎妓鞯膶懗隽诉@樣的模板它同樣包含了一個封面圖,一個標題和一個簡介。 從試著改進可重用CSS做起 泊學4K視頻 回想起每次更新泊學網(wǎng)站,最讓我頭疼的,就是改寫CSS。在不同的階段,對CSS不斷深入的理解,對網(wǎng)站內(nèi)容的調(diào)整,對UI的重用需求,都影響著CSS的編寫方式,因此,稍不留神,你的代碼理解就會充...
摘要:語言行為及特征狀態(tài)看不懂任何英語技術(shù),英語文檔,凡事沒有培訓部在搞的,只有英文文檔的東西國內(nèi)一律沒大公司在用,都非主流,排斥英文文檔和新技術(shù),以及各種超出他學習能力范圍的技術(shù)。 在撰寫此文前首先必須申明的是本人不鄙視任何一種框架,也無意于挑起PHP框架間的戰(zhàn)爭,更沒有貶低某個框架使用者的用意,本文純粹個人的看法。你可以認為我無知也好,或者裝逼也好,請不要試著在任何情況下,隨便發(fā)起言語的...
閱讀 935·2021-11-08 13:22
閱讀 2863·2021-09-29 09:45
閱讀 2839·2021-09-09 11:52
閱讀 2271·2019-08-30 13:20
閱讀 3757·2019-08-29 13:28
閱讀 1375·2019-08-29 12:32
閱讀 2736·2019-08-29 11:10
閱讀 1655·2019-08-26 13:34