常见的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 相关文章推荐
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
Sep 30 PHP
PHP简单系统数据添加以及数据删除模块源文件下载
Jun 07 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
Mar 26 PHP
分享一个超好用的php header下载函数
Jan 31 PHP
php中opendir函数用法实例
Nov 15 PHP
Mac OS下配置PHP+MySql环境
Feb 25 PHP
php中ob_flush函数和flush函数用法分析
Mar 18 PHP
Yii2中关联查询简单用法示例
Aug 10 PHP
PHP解压ZIP文件到指定文件夹的方法
Nov 17 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
Feb 17 PHP
PHP 文件锁与进程锁的使用示例
Aug 07 PHP
PHP实现的函数重载功能示例
Aug 03 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 ss7.5的数据调用 (笔记)
2010/03/08 PHP
PHP缓存技术的使用说明
2011/08/06 PHP
PHP判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
php 实现301重定向跳转实例代码
2016/07/18 PHP
mac系统下为 php 添加 pcntl 扩展
2016/08/28 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
Javascript浅谈之this
2013/12/17 Javascript
浅析node.js中close事件
2014/11/26 Javascript
jQuery+HTML5美女瀑布流布局实现方法
2015/09/21 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
2015/10/23 Javascript
利用vue写todolist单页应用
2016/12/15 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
es6 filter() 数组过滤方法总结
2019/04/03 Javascript
webpack4实现不同的导出类型
2019/04/09 Javascript
vscode vue 文件模板的配置方法
2019/07/23 Javascript
Vue 开发必须知道的36个技巧(小结)
2019/10/09 Javascript
JS实现灯泡开关特效
2020/03/30 Javascript
js实现点赞按钮功能的实例代码
2020/03/06 Javascript
微信小程序自定义modal弹窗组件的方法详解
2020/12/20 Javascript
[38:27]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第二场 11.26
2020/11/30 DOTA
[47:43]完美世界DOTA2联赛PWL S3 Magama vs GXR 第二场 12.19
2020/12/24 DOTA
python 多进程通信模块的简单实现
2014/02/20 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
2019/01/23 Python
将python文件打包成EXE应用程序的方法
2019/05/22 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
幼儿园教师备课制度
2014/01/12 职场文书
简历里的自我评价范文
2014/02/24 职场文书
微笑服务演讲稿
2014/05/13 职场文书
八年级作文之友情
2019/11/25 职场文书
Django数据库(SQlite)基本入门使用教程
2022/07/07 Python