常见的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 相关文章推荐
Banner程序
Oct 09 PHP
优化使用mysql存储session的php代码
Jan 10 PHP
php 在线打包_支持子目录
Jun 28 PHP
php注销代码(session注销)
May 31 PHP
Linux中用PHP判断程序运行状态的2个方法
May 04 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
May 04 PHP
PHP读取RSS(Feed)简单实例
Jun 12 PHP
php mb_substr()函数截取中文字符串应用示例
Jul 29 PHP
php的curl封装类用法实例
Nov 07 PHP
深入理解PHP的远程多会话调试
Sep 21 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 23 PHP
HTTP头隐藏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 syntax error, unexpected $end 错误的一种原因及解决
2008/10/25 PHP
PHP将回调函数作用到给定数组单元的方法
2014/08/19 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
2015/07/01 PHP
php生成唯一数字id的方法汇总
2015/11/18 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
2015/12/31 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
jQuery 学习第七课 扩展jQuery的功能 插件开发
2010/05/17 Javascript
js弹窗返回值详解(window.open方式)
2014/01/11 Javascript
对比分析json及XML
2014/11/28 Javascript
JS组件Bootstrap Table使用方法详解
2016/02/02 Javascript
JavaScript操作class和style样式代码详解
2016/02/13 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
用JS动态改变表单form里的action值属性的两种方法
2016/05/25 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
微信分享调用jssdk实例
2017/06/08 Javascript
Vue自定义指令详解
2017/07/28 Javascript
Vue计算属性的使用
2017/08/04 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
jQuery 点击获取验证码按钮及倒计时功能
2018/09/20 jQuery
微信小程序在线客服自动回复功能(基于node)
2019/07/03 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
[53:52]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[20:30]职业巡回赛回顾
2018/08/09 DOTA
在Python的Django框架中用流响应生成CSV文件的教程
2015/05/02 Python
python读取大文件越来越慢的原因与解决
2019/08/08 Python
pytorch中图像的数据格式实例
2020/02/11 Python
查看已安装tensorflow版本的方法示例
2020/04/19 Python
django Model层常用验证器及自定义验证器详解
2020/07/15 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
2021/02/03 Python
世界上最大的巴士旅游观光公司:Big Bus Tours
2016/10/20 全球购物
Foreo国际站:Foreo International
2018/10/29 全球购物
J2EE中的容器都包括哪些
2013/08/21 面试题
人力资源部经理的岗位职责
2014/03/04 职场文书
秋菊打官司观后感
2015/06/03 职场文书
2016民族团结先进个人事迹材料
2016/02/26 职场文书
担保书怎么写 ?
2019/04/22 职场文书