当前位置: 首页 > 科技观察

优化你的PHP代码,现在就开始

时间:2023-03-13 19:58:54 科技观察

前言我一生的文章都会放在这里,我的博客,希望每一行代码,每一段文字,都能对你有所帮助。https://github.com/CrazyCodes...大家好,我是CrazyCodes。今天我们不谈工具、规范等,而是如何写出“好”的代码。本文以我职业生涯中遇到的代码为例。如有不妥,请在评论区提出异议,谢谢。搜索功能搜索很常见,大部分复杂的搜索都是在后台进行的。比如一般的需求是这样的。这是一个后台用户列表搜索功能搜索条件可以并列是必填的用户名可以是没有电话号码可以是身份验证可以是用户性别可以是上次登录时间可以是账户余额可以是初学者代码看到这些例子你会忍不住但是颤抖一下,重新开始造轮子,对吧?以nativeexample为例,一开始你可能会这样写(以下是伪代码):if(IS_POST){$like='';if(isset($_POST['username'])){$username=$_POST['username'];$like.="usernamelike'%".$username."%'and";}if(isset($_POST['phone'])){$phone=$_POST['phone'];$like.="phonelike'%".$phone."%'and";}if($_POST['is_auth']){$isAuth=$_POST['is_auth'];$like.="is_authlike'%".$isAuth."%'and";}if($_POST['sex']){$sex=$_POST['sex'];$like.="sexlike'%".$性别。”%'和“;}我f($_POST['time']){$time=$_POST['time'];$like.="timelike'%".$time."%'and";}if($_POST['wallet']){$wallet=$_POST['wallet'];$like.="walletlike'%".$wallet."%'and";}$like=rtrim($like,'and');$sql="SELECT*FROM`user`WHERE{$like}";}else{returnview('user');}封装...,不错,结构清晰,传统初学者条码,接下来我们封装几段代码函数post($param){returnisset($_POST[$param])?$_POST[$param]:null;}if(IS_POST){$like='';if(post('username')){$username=post('username');$like.="usernamelike'%".$username."%'and";}if(post('phone')){$phone=post('phone');$like.="phonelike'%".$phone."%'and";}if(post('is_auth')){$isAuth=post('is_auth');$like.="is_authlike'%".$isAuth."%'and";}if(post('sex')){$sex=post('sex');$like.="sexlike'%".$sex."%'and";}if(post('time')){$time=post('time');$like.="timelike'%".$time."%'and";}if(post('wallet')){$wallet=post('wallet');$like.="walletlike'%".$wallet."%'and";}$like=rtrim($like,'and');$sql="SELECT*FROM`user`WHERE{$like}";}else{returnview('user');}适当使用迭代好吧,至少我们可以自由控制post方法,但是这种程序代码维护性太低了,我们来改进一下:functionpost($param){returnisset($_POST[$param])?$_POST[$param]:false;}functionpostAll(){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{returnview('user');}面向对象和添加迭代代码看起来很整洁,作为PHP程序员,写非面向对象的代码是不靠谱的,给functionrequest($param=null){returnnewRequest($param);}classRequest{publicfunction__construct(string$param=null){returnisset($_POST[$param]添加class)?$_POST[$param]:false;}publicfunctionall(){return$_POST;}}classUser{publicfunctionindex(){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{returnview('user');}}}User的改造我们在改造User类,做一些判断和过滤。functionrequest($param=null){returnnewRequest($param);}classRequest{publicfunction__construct(string$param=null){returnisset($_POST[$param])?$_POST[$param]:false;}publicfunctionall(){return$_POST;}}classUser{public$request=['username','phone','is_auth','sex','time','wallet'];publicfunctionindex(){if(IS_POST){$like='';foreach(request()->all()as$key=>$value){if(in_array($key,$this->request)&&request($键)){$like.=sprintf("%slike%sand",$key,$value);}}$like=rtrim($like,'and');$sql="SELECT*FROM`user`WHERE{$like}";}else{returnview('user');}}}这个差不多。与真正的代码相比,可能还差得很远。我写这篇文章的目的不是教大家怎么写代码,而是说明编码不是一次性的,应该多次修改,让代码具有可维护性、可扩展性等,各种“属性””。