常见的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代码
Apr 09 PHP
php中删除字符串中最先出现某个字符的实现代码
Feb 03 PHP
Codeigniter实现智能裁剪图片的方法
Jun 12 PHP
php使用array_search函数实现数组查找的方法
Jun 12 PHP
CI框架中$this->load->library()用法分析
May 18 PHP
使用JavaScript创建新样式表和新样式规则
Jun 14 PHP
PHP Header用于页面跳转时的几个注意事项
Oct 21 PHP
php获取开始与结束日期之间所有日期的方法
Nov 29 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
Feb 09 PHP
Zend Framework基于Command命令行建立ZF项目的方法
Feb 18 PHP
YII框架模块化处理操作示例
Apr 26 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
Dec 20 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基础知识:类与对象(1)
2006/12/13 PHP
利用php递归实现无限分类 格式化数组的详解
2013/06/08 PHP
php中time()和mktime()方法的区别
2013/09/28 PHP
php如何执行非缓冲查询API
2016/07/22 PHP
formValidator3.3的ajaxValidator一些异常分析
2011/07/12 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
微信小程序之绑定点击事件实例详解
2017/07/07 Javascript
详解ajax的data参数错误导致页面崩溃
2018/04/30 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
2018/08/09 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
JavaScript ES2019中的8个新特性详解
2019/02/20 Javascript
微信小程序实现页面浮动导航
2020/01/08 Javascript
JavaScript实现拖动对话框效果的实现代码
2020/10/12 Javascript
python实现批量改文件名称的方法
2015/05/25 Python
python函数形参用法实例分析
2015/08/04 Python
python在ubuntu中的几种安装方法(小结)
2017/12/08 Python
通过Python模块filecmp 对文件比较的实现方法
2018/06/29 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
python单例设计模式实现解析
2020/01/07 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
Django media static外部访问Django中的图片设置教程
2020/04/07 Python
Python通过两个dataframe用for循环求笛卡尔积
2020/04/29 Python
django和flask哪个值得研究学习
2020/07/31 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
Hurley官方网站:扎根于海滩生活方式的全球青年文化品牌
2020/05/18 全球购物
生产车间实习自我鉴定
2013/09/23 职场文书
古汉语文学求职信范文
2014/03/16 职场文书
党员岗位承诺口号大全
2014/03/28 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
微笑服务演讲稿
2014/05/13 职场文书
营销总经理岗位职责范本
2014/09/02 职场文书
2015年教育实习工作总结
2015/04/24 职场文书
vue使用echarts实现折线图
2022/03/21 Vue.js
Docker安装MySql8并远程访问的实现
2022/07/07 Servers