常见的5个PHP编码小陋习以及优化实例讲解


Posted in PHP onFebruary 27, 2021

在做过大量的代码审查后,我经常看到一些重复的错误,以下是纠正这些错误的方法。

在循环之前测试数组是否为空

$items = [];
// ...
if (count($items) > 0) {
  foreach ($items as $item) {
    // process on $item ...
  }
}

foreach 以及数组函数 (array_*) 可以处理空数组。

不需要先进行测试可减少一层缩进

$items = [];
// ...
foreach ($items as $item) {
  // process on $item ...
}

将代码内容封装到一个 if 语句汇总

function foo(User $user) {
  if (!$user->isDisabled()) {
    // ...
    // long process
    // ...
  }
}

这不是 PHP 特有的情况,不过我经常碰到此类情况。你可以通过提前返回来减少缩进。

所有主要方法处于第一个缩进级别

function foo(User $user) {
  if ($user->isDisabled()) {
    return;
  }

  // ...
  // 其他代码
  // ...
}

多次调用 isset 方法

你可能遇到以下情况:

$a = null;
$b = null;
$c = null;
// ...

if (!isset($a) || !isset($b) || !isset($c)) {
  throw new Exception("undefined variable");
}

// 或者

if (isset($a) && isset($b) && isset($c) {
  // process with $a, $b et $c
}

// 或者

$items = [];
//...
if (isset($items['user']) && isset($items['user']['id']) {
  // process with $items['user']['id']
}

我们经常需要检查变量是否已定义,php 提供了 isset 函数可以用于检测该变量,而且该函数可以一次接受多个参数,所以一下代码可能更好:

$a = null;
$b = null;
$c = null;
// ...

if (!isset($a, $b, $c)) {
  throw new Exception("undefined variable");
}

// 或者

if (isset($a, $b, $c)) {
  // process with $a, $b et $c
}

// 或者

$items = [];
//...
if (isset($items['user'], $items['user']['id'])) {
  // process with $items['user']['id']
}

echo 和 sprintf 方法一起使用

$name = "John Doe";
echo sprintf('Bonjour %s', $name);

看到这段代码你可能会想笑,不过我的确这样写了一段时间,而且我仍然会看到很多这样写的!其实 echo 和 sprintf 并不需同时使用,printf 就可以完全实现打印功能。

$name = "John Doe";
printf('Bonjour %s', $name);

通过组合两种方法检查数组中是否存在键

$items = [
  'one_key' => 'John',
  'search_key' => 'Jane',
];

if (in_array('search_key', array_keys($items))) {
  // process
}

我经常看到的最后一个错误是 in_array 和 array_keys 的联合使用。所有这些都可以使用 array_key_exists 替换。

$items = [
  'one_key' => 'John',
  'search_key' => 'Jane',
];

if (array_key_exists('search_key', $items)) {
  // process
}
我们还可以使用 isset 来检查值是否不是 null。

if (isset($items['search_key'])) {
  // process
}

到此这篇关于常见的5个PHP编码小陋习以及优化实例讲解的文章就介绍到这了,更多相关常见的5个PHP编码小陋习内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
提问的智慧
Oct 09 PHP
php合并数组array_merge函数运算符加号与的区别
Oct 31 PHP
PHP中输出转义JavaScript代码的实现代码
Apr 22 PHP
php中随机显示图片的函数代码
Jun 23 PHP
php网上商城购物车设计代码分享
Feb 15 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
Aug 21 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
Apr 11 PHP
PHP简单获取多个checkbox值的方法
Jun 13 PHP
PHP有序表查找之插值查找算法示例
Feb 10 PHP
PHP常见加密函数用法示例【crypt与md5】
Jan 27 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
Oct 12 PHP
PHP中的异常处理机制深入讲解
Nov 10 PHP
laravel数据库查询结果自动转数组修改实例
Feb 27 #PHP
PHP的垃圾回收机制代码实例讲解
Feb 27 #PHP
php命令行模式代码实例详解
Feb 26 #PHP
PHP时间类完整代码实例
Feb 26 #PHP
PHP队列场景以及实现代码实例详解
Feb 26 #PHP
PHP实现长轮询消息实时推送功能代码实例讲解
Feb 26 #PHP
php的对象传值与引用传值代码实例讲解
Feb 26 #PHP
You might like
PHP 和 MySQL 基础教程(一)
2006/10/09 PHP
WHOIS类的修改版
2006/10/09 PHP
PHP中for循环语句的几种变型
2007/03/16 PHP
Yii实现自动加载类地图的方法
2015/04/01 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
Nigma vs AM BO3 第一场2.13
2021/03/10 DOTA
一种JavaScript的设计模式
2006/11/22 Javascript
JavaScript中获取元素索引的函数
2010/09/10 Javascript
JS判断客服QQ号在线还是离线状态的方法
2015/01/13 Javascript
VUE饿了么树形控件添加增删改功能的示例代码
2017/10/17 Javascript
JavaScript同源策略和跨域访问实例详解
2018/04/03 Javascript
JS实现简单日历特效
2020/01/03 Javascript
js实现列表向上无限滚动
2020/01/13 Javascript
微信小程序实现组件顶端固定或底端固定效果(不随滚动而滚动)
2020/04/09 Javascript
在vue中使用eslint,配合vscode的操作
2020/11/09 Javascript
深入了解Vue3模板编译原理
2020/11/19 Vue.js
用Python脚本来删除指定容量以上的文件的教程
2015/05/04 Python
Python中的rfind()方法使用详解
2015/05/19 Python
Python代码缩进和测试模块示例详解
2018/05/07 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
Python中的上下文管理器相关知识详解
2019/09/19 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
2021/02/06 Python
Finishline官网:美国一家领先的运动品牌鞋类、服装零售商
2016/07/20 全球购物
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
职业规划书如何设计?
2014/01/09 职场文书
同学会邀请书大全
2014/01/12 职场文书
采购部经理岗位职责
2014/02/10 职场文书
商业房地产广告语
2014/03/13 职场文书
全国税务系统先进集体事迹材料
2014/05/19 职场文书
党员教师个人对照检查材料(群众路线)
2014/09/26 职场文书
党校党性分析材料
2014/12/19 职场文书
狂人日记读书笔记
2015/06/30 职场文书
python flask开发的简单基金查询工具
2021/06/02 Python
Spring boot应用启动后首次访问很慢的解决方案
2021/06/23 Java/Android