场景一:遍历一个数组获取新的数据结构
也许你会这样写:
// 申明一个新的数组,组装成你想要的数据
$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中。所以,我们在写上游代码时异常直接抛出即可。

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

  1. React UI 组件库 Chakra UI - 01 v1.0介绍和快速使用

    Chakra UI Chakra UI 是简单.模块化和可访问的 UI 组件库. 本文 Chakra UI 版本:v1.6.2 基于 React 和 Emotion(CSS-IN-JS 方案库) 基于 ...

  2. 分享:Vue.js新手入门指南-0518-v1.0张雅慧

    最近在逛各大网站,论坛,以及像SegmentFault等编程问答社区,发现Vue.js异常火爆,重复性的提问和内容也很多,楼主自己也趁着这个大前端的热潮,着手学习了一段时间的Vue.js,目前用它正在 ...

  3. 分享:Vue.js新手入门指南-0518-v1.0张雅慧(续)

    11.我在学习Vue.js的时候老是听到Webpack,这是啥? Webpack是一个前端打包和构建工具.如果你之前一直是手写HTML,CSS,JavaScript,并且通过link标签将CSS引入你 ...

  4. 表达式语言-0421-v1.0张雅慧

    一.表达式语言简史 JSP 2.0 最初是将 EL应用在 JSP 标准标签库(JSTL)1.0 规范中.JSP 1.2 程序员将标准 库导入到他们的应用程序中,就可以使用 EL.JSP 2.0 及其更 ...

  5. redis.conf配置文件详解-0511-v1.0张雅慧

    一.基本配置 daemonize no 是否以后台进程启动 databases 16 创建database的数量(默认选中的是database 0) save 900 1 #刷新快照到硬盘中,必须满足 ...

  6. 云上部署Python3爬虫-以腾讯云+Ubuntu为例-0525-v1.0张雅慧

    前期准备 (也可以到腾讯云开发者实验室体验) 1. 购买云服务器 选择一家云服务厂商, 购买云服务器, 目前国内主流服务均有提供学生版 如果第一次购买, 可以戳这个链接 https://cloud.t ...

  7. 融资-0420-v1.0张雅慧

    主要内容: 定义: 融资是指为支付超过现金的购货款而采取的货币交易手段,或为取得资产而集资所采取的货币手段.指为支付超过现金的购货款而采取的货币交易手段,或为取得资产而集资所采取的货币手段.货币资金的 ...

  8. 初识Spring MVC-0412-v1.0张雅慧

    初识Spring MVC 授课老师:720科技张森鹏 知识笔记: 一.用途: 是Spring框架中用于Web应用快速开发的一个模块.使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 S ...

  9. 通用商业画布-0408-v1.0张雅慧

    商业画布图分析 我将从以下两张图进行分析: 1. 图一:一个项目想要可以顺利进行达到预期目标,首要的,应当明确好项目出发点,即公司or项目的关键业务是什么,简言之我要做什么,其次我拥有的核心资源是什么 ...

最新文章

  1. 密码密文 android,Android密码明文密文切换
  2. adb server无法启动方法,结束占用端口的进程
  3. [BZOJ] 1688: [Usaco2005 Open]Disease Manangement 疾病管理
  4. ie 7 beta 2出来了
  5. [css] 请写出:link、:visited、:hover、:active的执行顺序
  6. 图的遍历算法【数据结构F】
  7. Windows完全卸载oracle11g步骤
  8. “单细胞”前瞻 |新型微滴反应筛选技术ATAC-seq数据分析新篇章
  9. SpringBoot 如何进行对象复制,老鸟们都这么玩的!
  10. 变量使用self.foo还是_foo
  11. Python 数据科学手册 5.1 什么是机器学习
  12. 【GitHub】用Bash编写的 Linux 资源监视器
  13. python实现 模糊C均值聚类算法(Fuzzy-C-Means)-基于iris数据集
  14. 几何画板椭圆九种画法_详解椭圆的五种画法,很全面!!!
  15. HTML5+CSS大作业 网页制作代码_大学生网页制作作业代码——年会抽奖网页设计(1页)
  16. python(模块)xlsxwriter
  17. python语言的就业方向_Python语言就业方向
  18. ts(typescript)面向对象之类的继承
  19. 以某SCI期刊为例说明该期刊投稿须知和流程
  20. Datawhale十月组队学习_推荐系统3

热门文章

  1. MySQL Transportable Tablespace
  2. 历年北京理工大学复试上机题
  3. ASCII - 美国标准信息交换代码
  4. 十月最新,小红书面试经历,问答超详细!
  5. 语义分割之 标签生成
  6. mysql数据库实验报告jdbc_Jdbc连接数据库实验报告(1)
  7. matlab神经网络求解最优化,matlab神经网络训练数据
  8. FireFox浏览器安装插件时提示:“该附加组件无法安装,因为它有可能已损坏”
  9. centos 6下apache kudu安装报错Error during hole punch test问题解决
  10. vb 产生随机数顺序一样