php代码优化,思维扩展-06.01-v1.0张雅慧

场景一:遍历一个数组获取新的数据结构
也许你会这样写:
// 申明一个新的数组,组装成你想要的数据
$tmp = [];
foreach ($arr as $k => $v) {
// 取出你想要的数据
$tmp[$k]['youwant'] = $v['youwant'];
...
// 一系列判断得到你想要的数据
if (...) {
$tmp[$k]['youwantbyjudge'] = 'TIGERB';
}
...
}
// 最后得要你想要的数组$tmp
-------------------------------------------------------
// 也许你觉着上面的写法不是很好,那我们下面换种写法
foreach ($arr as $k => $v) {
// 一系列判断得到你想要的数据
if (...) {
// 复写值为你想要的
$arr[$k]['youwantbyjudge'] = 'TIGERB'
}
...
// 干掉你不想要的结构
unset($arr[$k]['youwantdel']);
}
// 最后我们得到我们的目标数组$arr
接下来我们使用引用值:
foreach ($arr as &$v) {
// 一系列判断得到你想要的数据
if (...) {
// 复写值为你想要的
$v['youwantbyjudge'] = 'TIGERB'
}
...
// 干掉你不想要的结构
unset($v['youwantdel']);
}
unset($v);
// 最后我们得到我们的目标数组$arr
使用引用是不是使我们的代码更加的简洁,除此之外相对于第一种写法,我们节省了内存空间,尤其是再操作一个大数组时效果是及其明显的。
场景二:传递一个值到一个函数中获取新的值
基本和数组遍历一致,我们只需要声明这个函数的这个参数为引用即可,如下:
function decorate(&$arr = []) {
# code...
}
$arr = [
....
];
// 调用函数
decorate($arr);
// 如上即得到新的值$arr,好处还是节省内存空间
使用try…catch…
加入有下面一段逻辑:
class UserModel
{
public function login($username = '', $password = '')
{
code...
if (...) {
// 用户不存在
return -1;
}
code...
if (...) {
// 密码错误
return -2;
}
code...
}
}
class UserController
{
public function login($username = '', $password = '')
{
$model = new UserModel();
$res = $model->login($username, $password);
if ($res === -1) {
return [
'code' => '404',
'message' => '用户不存在'
];
}
if ($res === -2) {
return [
'code' => '400',
'message' => '密码错误'
];
}
code...
}
}
我们用try…catch…改写后:
class UserModel
{
public function login($username = '', $password = '')
{
code...
if (...) {
// 用户不存在
throw new Exception('用户不存在', '404');
}
code...
if (...) {
// 密码错误
throw new Exception('密码错误', '400');
}
code...
}
}
class UserController
{
public function login($username = '', $password = '')
{
try {
$model = new UserModel();
$res = $model->login($username, $password);
// 如果需要的话,我们可以在这里统一commit数据库事务
// $db->commit();
} catch (Exception $e) {
// 如果需要的话,我们可以在这里统一rollback数据库事务
// $db->rollback();
return [
'code' => $e->getCode(),
'message' => $e->getMessage()
]
}
}
}
通过使用try…catch…使我们的代码逻辑更加清晰,try…里只需要关注业务正常的情况,异常的处理统一在catch中。所以,我们在写上游代码时异常直接抛出即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值