常见的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中用header图片地址 简单隐藏图片源地址
Apr 09 PHP
纯php打造的tab选项卡效果代码(不用js)
Dec 29 PHP
逆序二维数组插入一元素的php代码
Jun 08 PHP
php变量范围介绍
Oct 15 PHP
php5.3 注意事项说明
Jul 01 PHP
php命令行使用方法和命令行参数说明
Apr 08 PHP
php获取apk包信息的方法
Aug 15 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
Oct 01 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
Sep 23 PHP
Django中的cookie与session操作实例代码
Aug 17 PHP
Laravel框架源码解析之反射的使用详解
May 14 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
10条PHP高级技巧[修正版]
2011/08/02 PHP
javascript delete 使用示例代码
2010/03/29 Javascript
Mac地址验证的javascript代码
2013/11/09 Javascript
js获取某元素的class里面的css属性值代码
2014/01/16 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
JavaScript学习笔记之JS函数
2015/01/22 Javascript
基于bootstrap3和jquery的分页插件
2015/07/31 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
2015/09/19 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
jQuery时间验证和转换为标准格式的时间格式
2017/03/06 Javascript
详解Vue.js入门环境搭建
2017/03/17 Javascript
基于pako.js实现gzip的压缩和解压功能示例
2017/06/13 Javascript
详解Vue路由开启keep-alive时的注意点
2017/06/20 Javascript
JS+HTML5 FileReader实现文件上传前本地预览功能
2020/03/27 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
vue指令v-html使用过滤器filters功能实例
2019/10/25 Javascript
AngularJS动态生成select下拉框的方法实例
2019/11/17 Javascript
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
Python的条件语句与运算符优先级详解
2015/10/13 Python
python如何重载模块实例解析
2018/01/25 Python
Appium Python自动化测试之环境搭建的步骤
2019/01/23 Python
Python使用LDAP做用户认证的方法
2019/06/20 Python
Django 5种类型Session使用方法解析
2020/04/29 Python
HTML5 placeholder属性详解
2016/06/22 HTML / CSS
Html5在手机端调用相机的方法实现
2020/05/13 HTML / CSS
美国克罗格超市在线购物:Kroger
2019/06/21 全球购物
查环查孕证明
2014/01/10 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
就业意向协议书
2015/01/29 职场文书
工厂员工辞职信范文
2015/05/12 职场文书
中秋节感想
2015/08/10 职场文书
Java 超详细讲解hashCode方法
2022/04/07 Java/Android
小程序自定义轮播图圆点组件
2022/06/25 Javascript