常见的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 相关文章推荐
phpMyAdmin 安装及问题总结
May 28 PHP
php快速url重写更新版[需php 5.30以上]
Apr 25 PHP
php伪静态之APACHE篇
Jun 02 PHP
PHP中Http协议post请求参数
Nov 02 PHP
PHP邮箱验证示例教程
Jun 01 PHP
PHP微信开发之有道翻译
Jun 23 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
浅谈PHP实现大流量下抢购方案
Dec 15 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
May 23 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
Jun 14 PHP
详细分析PHP 命名空间(namespace)
Jun 30 PHP
Nginx+php配置文件及原理解析
Dec 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
php递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
php实现从上传文件创建缩略图的方法
2015/04/02 PHP
JavaScript iframe的相互操作浅析
2009/10/14 Javascript
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
深入分析jquery解析json数据
2014/12/09 Javascript
详解JavaScript中数组的相关知识
2015/07/29 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
2015/12/01 Javascript
JavaScript驾驭网页-DOM
2016/03/24 Javascript
Bootstrap 布局组件(全)
2016/07/18 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
2016/11/25 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
2016/12/03 Javascript
Vue-Router实现页面正在加载特效方法示例
2017/02/12 Javascript
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
JS中锚点链接点击平滑滚动并自由调整到顶部位置
2021/02/06 Javascript
[01:32]完美世界DOTA2联赛10月29日精彩集锦
2020/10/30 DOTA
Python比较两个图片相似度的方法
2015/03/13 Python
在Apache服务器上同时运行多个Django程序的方法
2015/07/22 Python
python负载均衡的简单实现方法
2018/02/04 Python
如何在Win10系统使用Python3连接Hive
2020/10/15 Python
python time.strptime格式化实例详解
2021/02/03 Python
C# Debug和Testing相关面试题
2015/10/25 面试题
酒店出纳岗位职责
2013/12/29 职场文书
写演讲稿所需要注意的4个条件
2014/01/09 职场文书
会计自荐信范文
2014/03/09 职场文书
升学宴主持词
2014/04/02 职场文书
爱情寄语大全
2014/04/09 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
2014年秋季开学典礼致辞
2014/08/02 职场文书
2016民族团结先进个人事迹材料
2016/02/26 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书