常见的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 相关文章推荐
通过ODBC连接的SQL SERVER实例
Oct 09 PHP
使用sockets:从新闻组中获取文章(一)
Oct 09 PHP
一个取得文件扩展名的函数
Oct 09 PHP
PHP对象Object的概念 介绍
Jun 14 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
Jul 07 PHP
PHP Error与Logging函数的深入理解
Jun 03 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
Jan 07 PHP
PHP在线书签系统分享
Jan 04 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
Jan 05 PHP
PHP中each与list用法分析
Jan 08 PHP
php往mysql中批量插入数据实例教程
Dec 12 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
Oct 13 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 配置文件中open_basedir选项作用
2009/07/19 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
纯CSS3实现质感细腻丝滑按钮
2021/03/09 HTML / CSS
JavaScript.The.Good.Parts阅读笔记(二)作用域&闭包&减缓全局空间污染
2010/11/16 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
js简单实现用户注册信息的校验代码
2013/11/15 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
中止javascript执行的方法
2014/02/14 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
jQuery中mouseover事件用法实例
2014/12/26 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
基于jQuery实现的菜单切换效果
2015/10/16 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
2016/02/25 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
2016/12/23 Javascript
简述JS控制台的使用
2018/07/15 Javascript
vue 使用外部JS与调用原生API操作示例
2019/12/02 Javascript
Python交互式图形编程的实现
2019/07/25 Python
tensorflow tf.train.batch之数据批量读取方式
2020/01/20 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
用纯css3和html制作泡沫对话框实现代码
2013/03/21 HTML / CSS
HTML5新控件之日期和时间选择输入的实现代码
2018/09/13 HTML / CSS
Otticanet澳大利亚:最顶尖的世界名牌眼镜, 能得到打折季的价格
2018/08/23 全球购物
测控技术与通信工程毕业生自荐信范文
2013/12/28 职场文书
商业计算机应用专业自荐书
2014/06/09 职场文书
2014年师德师风工作总结
2014/11/25 职场文书
关于倡议书的范文
2015/04/29 职场文书
学校隐患排查制度
2015/08/05 职场文书
担保公司2015年终工作总结
2015/10/14 职场文书
党员干部学习心得体会
2016/01/23 职场文书
如何使用CocosCreator对象池
2021/04/14 Javascript
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技