常见的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文件中是否含有bom的函数
May 31 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
Nov 07 PHP
php命名空间学习详解
Feb 27 PHP
PHP内置过滤器FILTER使用实例
Jun 25 PHP
PHP防盗链代码实例
Aug 27 PHP
PHP针对多用户实现更换头像功能
Sep 04 PHP
php smtp实现发送邮件功能
Jun 22 PHP
php实现的redis缓存类定义与使用方法示例
Aug 09 PHP
redis+php实现微博(三)微博列表功能详解
Sep 23 PHP
PHP的cookie与session原理及用法详解
Sep 27 PHP
基于laravel-admin 后台 列表标签背景的使用方法
Oct 03 PHP
laravel自定义分页的实现案例offset()和limit()
Oct 15 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加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
php中如何防止表单的重复提交
2013/08/02 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
2016/05/18 PHP
smarty模板数学运算示例
2016/12/11 PHP
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
javascript 模式设计之工厂模式详细说明
2010/05/10 Javascript
js的写法基础分析
2011/01/17 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
2015/09/15 Javascript
深入理解Angular2 模板语法
2016/08/07 Javascript
js通过classname来获取元素的方法
2016/11/24 Javascript
jQuery实现字符串全部替换的方法
2016/12/12 Javascript
javaScript基础详解
2017/01/19 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
详解Angular 4.x NgTemplateOutlet
2017/05/24 Javascript
JS手机端touch事件计算滑动距离的方法示例
2017/10/26 Javascript
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
React 组件中的 bind(this)示例代码
2018/09/16 Javascript
TypeScript开发Node.js程序的方法
2019/04/30 Javascript
npm全局环境变量配置详解
2020/12/15 Javascript
js中实现继承的五种方法
2021/01/25 Javascript
基于numpy中的expand_dims函数用法
2019/12/18 Python
python设置环境变量的作用整理
2020/02/17 Python
pycharm安装及如何导入numpy
2020/04/03 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
Python venv虚拟环境配置过程解析
2020/07/08 Python
BabyBjörn婴儿背带法国官网:BabyBjorn法国
2018/06/16 全球购物
耐克波兰官方网站:Nike波兰
2019/09/03 全球购物
ORLY官网:美国专业美甲一线品牌
2019/12/11 全球购物
教育孩子心得体会
2014/01/01 职场文书
六查六看六改心得体会
2014/10/14 职场文书
学校中秋节活动总结
2015/03/23 职场文书
诗词赏析-(浣溪沙)
2019/08/13 职场文书
导游词之西安骊山
2019/12/20 职场文书