日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
優(yōu)化你的PHP代碼,從現(xiàn)在做起

前言

按需設(shè)計(jì)網(wǎng)站可以根據(jù)自己的需求進(jìn)行定制,成都網(wǎng)站建設(shè)、成都網(wǎng)站制作構(gòu)思過(guò)程中功能建設(shè)理應(yīng)排到主要部位公司成都網(wǎng)站建設(shè)、成都網(wǎng)站制作的運(yùn)用實(shí)際效果公司網(wǎng)站制作網(wǎng)站建立與制做的實(shí)際意義

我一生的文章都會(huì)放在這里,我的博客,我希望每一行代碼,每一段文字都能幫助你。https://github.com/CrazyCodes...

大家好,我是CrazyCodes ,今天我們不聊工具、規(guī)范等等等等的輔助,就聊一下該如何寫(xiě)一段“好”的代碼,本文以我的職業(yè)生涯碰到的代碼為例,如有出入請(qǐng)?jiān)谠u(píng)論區(qū)提出異議,謝謝。

搜索功能

搜索很常見(jiàn),復(fù)雜的搜索大多出行在后臺(tái),舉個(gè)栗子,大概需求是這樣的。

這是一個(gè)后臺(tái)用戶(hù)列表的搜索功能

搜索條件 可否并行 是否必填
用戶(hù)名 可以
手機(jī)號(hào)碼 可以
是否已認(rèn)證 可以
用戶(hù)性別 可以
最近登錄時(shí)間 可以
賬戶(hù)余額 可以

初學(xué)者代碼

看到這些例子你是否不由的一顫,又要開(kāi)始造輪子的是不是?

以原生的例子為例,開(kāi)始你可能會(huì)這樣寫(xiě)(以下為偽代碼) :

 
 
 
  1. if (IS_POST) { 
  2.     $like = ''; 
  3.     if (isset($_POST['username'])) { 
  4.         $username = $_POST['username']; 
  5.         $like .= "username like '%" . $username . "%' and "; 
  6.     } 
  7.     if (isset($_POST['phone'])) { 
  8.         $phone = $_POST['phone']; 
  9.         $like .= "phone like '%" . $phone . "%' and"; 
  10.     } 
  11.     if ($_POST['is_auth']) { 
  12.         $isAuth = $_POST['is_auth']; 
  13.         $like .= "is_auth like '%" . $isAuth . "%' and"; 
  14.     } 
  15.     if ($_POST['sex']) { 
  16.         $sex = $_POST['sex']; 
  17.         $like .= "sex like '%" . $sex . "%' and"; 
  18.     } 
  19.     if ($_POST['time']) { 
  20.         $time = $_POST['time']; 
  21.         $like .= "time like '%" . $time . "%' and"; 
  22.     } 
  23.     if ($_POST['wallet']) { 
  24.         $wallet = $_POST['wallet']; 
  25.         $like .= "wallet like '%" . $wallet . "%' and"; 
  26.     } 
  27.     $like = rtrim($like, 'and'); 
  28.     $sql = "SELECT * FROM `user` WHERE {$like}"; 
  29. } else { 
  30.     return view('user'); 

封裝

恩...,還不錯(cuò),結(jié)構(gòu)清晰,傳統(tǒng)的初學(xué)者條型代碼,接下來(lái)我們先封裝一下幾塊代碼。

 
 
 
  1. function post($param) 
  2.     return isset($_POST[$param]) ? $_POST[$param] : null; 
  3. if (IS_POST) { 
  4.     $like = ''; 
  5.     if (post('username')) { 
  6.         $username = post('username'); 
  7.         $like .= "username like '%" . $username . "%' and "; 
  8.     } 
  9.     if (post('phone')) { 
  10.         $phone = post('phone'); 
  11.         $like .= "phone like '%" . $phone . "%' and"; 
  12.     } 
  13.     if (post('is_auth')) { 
  14.         $isAuth = post('is_auth'); 
  15.         $like .= "is_auth like '%" . $isAuth . "%' and"; 
  16.     } 
  17.     if (post('sex')) { 
  18.         $sex = post('sex'); 
  19.         $like .= "sex like '%" . $sex . "%' and"; 
  20.     } 
  21.     if (post('time')) { 
  22.         $time = post('time'); 
  23.         $like .= "time like '%" . $time . "%' and"; 
  24.     } 
  25.     if (post('wallet')) { 
  26.         $wallet = post('wallet'); 
  27.         $like .= "wallet like '%" . $wallet . "%' and"; 
  28.     } 
  29.     $like = rtrim($like, 'and'); 
  30.     $sql = "SELECT * FROM `user` WHERE {$like}"; 
  31. } else { 
  32.     return view('user'); 

適當(dāng)使用迭代

恩,至少我們可以自由控制post方法了,但是這類(lèi)過(guò)程化代碼維護(hù)性太低,我們?cè)俑倪M(jìn)下:

 
 
 
  1. function post($param) 
  2.     return isset($_POST[$param]) ? $_POST[$param] : false; 
  3. function postAll() 
  4.     return $_POST; 
  5. if (IS_POST) { 
  6.     $like = ''; 
  7.     foreach (postAll() as $key => $value) { 
  8.         if (post($key)) { 
  9.             $like .= "{$key} like '%{$value}%' and"; 
  10.         } 
  11.     } 
  12.     $like = rtrim($like, 'and'); 
  13.     $sql = "SELECT * FROM `user` WHERE {$like}"; 
  14. } else { 
  15.     return view('user'); 

面向?qū)ο?/strong>

加個(gè)迭代代碼看起來(lái)還算是整潔了點(diǎn),作為PHP程序員,寫(xiě)代碼不面向?qū)ο蟛豢孔V,把class加上。

 
 
 
  1. function request($param = null) 
  2.     return new Request($param); 
  3. class Request 
  4.     public function __construct(string $param = null)
  5.     { 
  6.         return isset($_POST[$param]) ? $_POST[$param] : false; 
  7.     } 
  8.     public function all() 
  9.     { 
  10.         return $_POST; 
  11.     } 
  12. class User 
  13.     public function index() 
  14.     { 
  15.         if (IS_POST) { 
  16.             $like = ''; 
  17.             foreach (request()->all() as $key => $value) { 
  18.                 if (request($key)) { 
  19.                     $like .= "{$key} like '%{$value}%' and"; 
  20.                 } 
  21.             } 
  22.             $like = rtrim($like, 'and'); 
  23.             $sql = "SELECT * FROM `user` WHERE {$like}"; 
  24.         } else { 
  25.             return view('user'); 
  26.         } 
  27.     } 

對(duì)User的改造

我們?cè)趯?duì)User的類(lèi)進(jìn)行改造,做一些判斷及篩選。

 
 
 
  1. function request($param = null) 
  2.     return new Request($param); 
  3. class Request 
  4.     public function __construct(string $param = null) 
  5.     { 
  6.         return isset($_POST[$param]) ? $_POST[$param] : false; 
  7.     } 
  8.     public function all() 
  9.     { 
  10.         return $_POST; 
  11.     } 
  12. class User 
  13.     public $request = [ 
  14.         'username', 
  15.         'phone', 
  16.         'is_auth', 
  17.         'sex', 
  18.         'time', 
  19.         'wallet' 
  20.     ]; 
  21.     public function index() 
  22.     { 
  23.         if (IS_POST) { 
  24.             $like = ''; 
  25.             foreach (request()->all() as $key => $value) { 
  26.                 if (in_array($key, $this->request) && request($key)) { 
  27.                     $like .= sprintf("%s like %s and", $key, $value); 
  28.                 } 
  29.             } 
  30.             $like = rtrim($like, 'and'); 
  31.             $sql = "SELECT * FROM `user` WHERE {$like}";
  32.         } else { 
  33.             return view('user'); 
  34.         } 
  35.     } 
  36. }

這就差不多了,對(duì)比真是的代碼可能還相差甚遠(yuǎn),我寫(xiě)這篇文章的目的不是教會(huì)你如何寫(xiě)代碼,是想說(shuō)明編碼不是一次性的,應(yīng)經(jīng)過(guò)多次修改,使代碼具有可維護(hù)性,擴(kuò)展性等等的,各種“性”。


本文題目:優(yōu)化你的PHP代碼,從現(xiàn)在做起
轉(zhuǎn)載源于:http://www.dlmjj.cn/article/cdsossg.html