如何优化PHP代码
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,这篇文章主要介绍了如何优化PHP代码,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言这是一个后台用户列表的搜索功能搜索条件可否并行是
千家信息网最后更新 2025年01月21日如何优化PHP代码
这篇文章主要介绍了如何优化PHP代码,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
前言
这是一个后台用户列表的搜索功能
搜索条件 | 可否并行 | 是否必填 |
---|---|---|
用户名 | 可以 | 否 |
手机号码 | 可以 | 否 |
是否已认证 | 可以 | 是 |
用户性别 | 可以 | 否 |
最近登录时间 | 可以 | 否 |
账户余额 | 可以 | 否 |
初学者代码
看到这些例子你是否不由的一颤,又要开始造轮子的是不是?
以原生的例子为例,开始你可能会这样写(以下为伪代码) :
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'); } } }
这就差不多了,对比真是的代码可能还相差甚远,我写这篇文章的目的不是教会你如何写代码,是想说明编码不是一次性的,应经过多次修改,使代码具有可维护性,扩展性等等的,各种"性"。
感谢你能够认真阅读完这篇文章,希望小编分享的"如何优化PHP代码"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
代码
篇文章
用户
例子
初学者
对象
封装
搜索
改造
迭代
不错
整洁
适当
自由
差不多
接下来
一次性
价值
传统
兴趣
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
伟创网络技术有限公司
网络安全模式如何升级win10
数据库好学ma
将自己的电脑配置成web服务器
数据库中英文用什么字符
软件开发工程师任职资格
德迅云服务器
远程数据库连接说明
营养分析软件数据库
广东人网络技术
lammps对服务器的要求
网络技术专业适合哪些城市
用友u8初始化登录数据库有误
数据库名字对连接的影响
软件开发费 规格型号
网络安全工程师最高岗位
魔兽数据库9.1.5
visual数据库怎么删除
飞腾数据库
华硕服务器主板bmc 口
网络技术专业能自考吗
oracle的数据库类型
网吧服务器响
网络安全事件调查处理
金风科技工业互联网平台
汇量科技互联网
如何获得阿里云服务器
服务器的管理口图形
软件开发年龄规定
用安卓设计数据库