常见的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输出控制功能在简繁体转换中的应用
Oct 09 PHP
使用PHP socke 向指定页面提交数据
Jul 23 PHP
PHP+ajax 无刷新删除数据
Feb 20 PHP
php 获取一个月第一天与最后一天的代码
May 16 PHP
PHP 计算代码执行耗时的代码修正网上普遍错误
May 14 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
Sep 28 PHP
php与java通过socket通信的实现代码
Oct 21 PHP
PHP调用MySQL存储过程并返回值的方法
Dec 26 PHP
windows7下php开发环境搭建图文教程
Jan 06 PHP
PHP中使用socket方式GET、POST数据实例
Apr 02 PHP
php使用PDO执行SQL语句的方法分析
Feb 16 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 简易输出CSV表格文件的方法详解
2013/06/20 PHP
PHP单链表的实现代码
2016/07/05 PHP
安装docker和docker-compose实例详解
2019/07/30 PHP
解决PhpStorm64不能启动的问题
2020/06/20 PHP
javascript中的prototype属性实例分析说明
2010/08/09 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
js Array操作的最简短最容易理解方法
2013/12/09 Javascript
node.js中使用socket.io的方法
2014/12/15 Javascript
JQuery替换DOM节点的方法
2015/06/11 Javascript
Bootstrap实现响应式导航栏效果
2015/12/28 Javascript
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
JavaScript实现求最大公共子串的方法
2018/02/03 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
浅谈express.js框架中间件(middleware)
2019/04/07 Javascript
JS根据json数组多个字段排序及json数组常用操作
2019/06/06 Javascript
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
JS的时间格式化和时间戳转换函数示例详解
2020/07/27 Javascript
浅谈Python中的作用域规则和闭包
2018/03/20 Python
Python并行分布式框架Celery详解
2018/10/15 Python
Python不同目录间进行模块调用的实现方法
2019/01/29 Python
Django之编辑时根据条件跳转回原页面的方法
2019/08/21 Python
Python中zip()函数的简单用法举例
2019/09/02 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
python在协程中增加任务实例操作
2021/02/28 Python
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
党员批评与自我批评
2014/02/12 职场文书
珍爱生命演讲稿
2014/05/10 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
安全教育的主题班会
2015/08/13 职场文书
幼儿体育课教学反思
2016/02/16 职场文书
Pytorch GPU内存占用很高,但是利用率很低如何解决
2021/06/01 Python
JavaScript实现简单计时器
2021/06/22 Javascript
Django+Celery实现定时任务的示例
2021/06/23 Python
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js