资讯专栏INFORMATION COLUMN

这几个编码小技巧将令你 PHP 代码更加简洁

Pikachu / 390人阅读

摘要:类型检测类型检测也是一种让代码简洁的小技巧。上文中,我们只是尝试搜集了一些例子,在这些例子里,你只需做出一点小的努力,就可以让你的代码变得更好更简洁。

保持代码简洁和高可读性远远要比我们想象的要难,有时候甚至比持续架构设计都要难。这里收集了一些可能对你重构代码有用的 代码片段 供大家参考。

数组转化

我们常常需要在一个函数里面接受一个支持字符串或者数组类型数据的参数。可以使用适当的类型转化方式将字符串类型转化成数组类型,来取代类型检测。

// 没有类型转化
$param = is_array($param) ? $param : [$param];
array_map(function ($item) {
    //
}, $param);

// 使用类型转化
array_map(function ($item) {
    //
}, (array) $param);

当然这看起来没什么区别,只是节省了一行代码而已。但是你可以设想一下,当你使用复杂的循环结构或者嵌套数组处理大量数据时。这样做将会有意义,它能使代码保持简洁。

类型检测

类型检测也是一种让代码简洁的小技巧。一个小的类型检测可以为你节省几行代码,同时可以使参数具有一些灵活性。

public function scopeOfTeam($query, $team) {
    $team = $team instanceof Team ? $team->id : $team;

    return $query->where("team_id", $team);
}

在这个例子中,我们可以使用一个表达式在一行中进行类型检测,所以我们不需要到处使用 if-else 语句。同时这样函数就可以接收 Team 类型或 int 型两种类型的数据了。

重构长 If 语句

有时候,在执行动作之前我们需要做一些条件检查。但是,随着我们的应用的持续增长,if 语句会变得越来越长。所以,我们需要考虑重构。一个小例子:

// 与其这样
if ($a === "val_1" || $a === "val_2" || $a === "val_3") {
    // 执行动作
}

// 不如这样
if (in_array($a, ["val_1", "val_2", "val_3"])) {
    // 执行方法
}

注意,第一个例子运行方式与第二个有一些不同。第一个例子中,只要有一个条件为真,则后面的条件就会被忽略,在一些情况下,它会更快。谢谢 Zois Pag 的建议。

这两个例子的结果是一样的,但是第二个更整洁。我们可以不再使用 || 操作符,并且只引用了 $a 变量一次。

去掉不必要的 if 语句

一个普遍的错误,我们会经常性的过度使用 if-else 语句。当然,有些时候它是不可省略的,但也有些情况,我们不需要用到它。

// 之前这样用
if ($a === "b") {
    return true;
} else {
    return false;
}

// 现在可以这样
return $a === "b";

但是逻辑颠倒了怎么办? 那么, 如果条件是 true 我们又想返回 false 该怎么办? 当然,在 if 语句中,我们仅需要相反的 true 和 false ,但是在重构的版本中,我们会有一个相对轻松的工作。只需要在你验真假的时候加上 ! 运算符。它将返回颠倒后的结果。

总结

每天我们都能发现一些充满了过度复杂逻辑的方案和代码,长期来看,这对开发者和产品本身都不好。上文中,我们只是尝试搜集了一些例子,在这些例子里,你只需做出一点小的努力,就可以让你的代码变得更好更简洁。

讨论请前往社区:https://laravel-china.org/top...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28444.html

相关文章

  • PHP / Laravel 月刊 #23

    摘要:大刀阔斧的改造在学习了两遍之后,基于教程开发的校园二手书交易平台熊能本周阅读清单纸牌屋弗兰克知道的太晚了实现微信红包拆分算法聊聊最近求职发生的故事無铭更多现代化知识,请前往知识社区 showImg(https://segmentfault.com/img/bV8ctF?w=1650&h=1100); 最新资讯 Laravel 5.6 中文文档翻译完成,译者 60 人,耗时 10 天...

    klinson 评论0 收藏0
  • 我与Jetbrains的这些年

    摘要:以为例,来讲解一下的一些有趣的配置。帅气的也是调整开发效率的一部分。的开发者日也并不是全部商业宣传,至少它做的事情是值得让开发者认可的。抱歉大会主要将了以下几项内容,上午是主会场,下午分俩个会场和,作为一个程序员,我没得选。 showImg(https://segmentfault.com/img/bVbjWTw?w=2000&h=1118); 前言 本章主要说一下如何去使用Jetbr...

    layman 评论0 收藏0
  • Laravel 5.7 最佳实践和开发技巧分享

    摘要:当查询数据时,本地范围允许我们创建自己的查询构造器链式方法。这样便会知道这是一个本地范围并且可以在查询构造器中使用。某些查询构造器不可用或者说可用但是方法名不同,关于这些请查阅所有集合的方法。 showImg(https://segmentfault.com/img/remote/1460000017877956?w=800&h=267); Laravel 因可编写出干净,可用可调试的...

    ninefive 评论0 收藏0

发表评论

0条评论

Pikachu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<