常见的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
Dedecms常用函数解析
Feb 01 PHP
require(),include(),require_once()和include_once()区别
Mar 27 PHP
PHP字符串 ==比较运算符的副作用
Oct 21 PHP
elgg 获取文件图标地址的方法
Mar 20 PHP
深入for,while,foreach遍历时间比较的详解
Jun 08 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
Feb 14 PHP
php 解决扫描二维码下载跳转问题
Jan 13 PHP
PHP实现简易计算器功能
Aug 28 PHP
PHP XML Expat解析器知识点总结
Feb 15 PHP
PHP的介绍以及优势详细分析
Sep 05 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
Apr 27 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之对抗Web扫描器的脚本技巧
2008/10/01 PHP
php程序的国际化实现方法(利用gettext)
2011/08/14 PHP
php使用正则过滤js脚本代码实例
2014/05/10 PHP
PHP中创建和验证哈希的简单方法实探
2015/07/06 PHP
Linux环境下php实现给网站截图的方法
2016/05/03 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
2018/03/31 PHP
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
2011/01/06 Javascript
关于javascript中的typeof和instanceof介绍
2012/12/04 Javascript
Jquery中使用setInterval和setTimeout的方法
2013/04/08 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
js遍历map javaScript遍历map的简单实现
2016/08/26 Javascript
Move.js入门
2017/02/08 Javascript
基于Bootstrap分页的实例讲解(必看篇)
2017/07/04 Javascript
关于Promise 异步编程的实例讲解
2017/09/01 Javascript
javascript高级模块化require.js的具体使用方法
2017/10/31 Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
2020/07/31 Javascript
JavaScript中的Proxy对象
2020/11/27 Javascript
Python 文件操作实现代码
2009/10/07 Python
Python 2.7中文显示与处理方法
2018/07/16 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
Python正则匹配判断手机号是否合法的方法
2020/12/09 Python
Python字符串的全排列算法实例详解
2019/01/07 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
Python跳出多重循环的方法示例
2019/07/03 Python
简单的Python调度器Schedule详解
2019/08/30 Python
关于Python3 类方法、静态方法新解
2019/08/30 Python
PAUL HEWITT手表美国站:德国北部时尚生活配饰品牌,船锚元素
2017/11/18 全球购物
世界上最大的字体市场:MyFonts
2020/01/10 全球购物
DTD的含义以及作用
2014/01/26 面试题
《白鹅》教学反思
2014/04/13 职场文书
中学生评语大全
2014/04/18 职场文书
本科毕业生自荐信
2014/05/26 职场文书
家长会欢迎标语
2014/06/24 职场文书
生产车间管理制度
2015/08/04 职场文书
2016年优秀少先队辅导员事迹材料
2016/02/26 职场文书
PHP使用QR Code生成二维码实例
2021/07/07 PHP