常见的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 相关文章推荐
php session 错误
May 21 PHP
PHP set_time_limit(0)长连接的实现分析
Mar 02 PHP
phpexcel导入excel数据使用方法实例
Dec 24 PHP
php cli换行示例
Apr 22 PHP
浅谈php命令行用法
Feb 04 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
Mar 03 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
Mar 14 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
Jun 02 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
Nov 14 PHP
PHP操作Postgresql封装类与应用完整实例
Apr 24 PHP
浅析php如何实现爬取数据原理
Sep 27 PHP
实例分析10个PHP常见安全问题
Jul 09 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
超外差式晶体管收音机的组装与统调
2021/03/01 无线电
PHP在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
php常量详细解析
2015/10/27 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
php 访问oracle 存储过程实例详解
2017/01/08 PHP
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
jquery随机展示头像代码
2011/12/21 Javascript
jQuery中filter()和find()的区别深入了解
2013/09/25 Javascript
jquery实现弹出窗口效果的实例代码
2013/11/28 Javascript
基于iframe实现类似于ajax的页面无刷新
2014/05/31 Javascript
jQuery中Ajax的get、post等方法详解
2015/01/20 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
微信小程序 swiper组件构建轮播图的实例
2017/09/20 Javascript
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
2019/10/31 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
[31:55]完美世界DOTA2联赛循环赛 IO vs GXR BO2第一场 11.04
2020/11/05 DOTA
Python使用pylab库实现绘制直方图功能示例
2018/06/01 Python
利用Python实现Shp格式向GeoJSON的转换方法
2019/07/09 Python
python将四元数变换为旋转矩阵的实例
2019/12/04 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
在脚本中单独使用django的ORM模型详解
2020/04/01 Python
使用tensorflow进行音乐类型的分类
2020/08/14 Python
Maje德国官网:法国女性成衣品牌
2017/02/10 全球购物
兰蔻美国官网:Lancome美国
2017/04/25 全球购物
巴西最大的家具及装饰用品店:Mobly
2017/10/11 全球购物
CK巴西官方网站:Calvin Klein巴西
2019/07/19 全球购物
C/C++有关内存的思考题
2015/12/04 面试题
财务会计专业应届毕业生求职信
2013/10/18 职场文书
公司行政经理岗位职责
2013/12/24 职场文书
应届实习生的自我评价范文
2014/01/05 职场文书
修理厂厂长岗位职责
2014/01/30 职场文书
2014年银行个人工作总结
2014/12/05 职场文书
保险公司反洗钱宣传活动总结
2015/05/08 职场文书
Pytest中skip skipif跳过用例详解
2021/06/30 Python