常见的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
mysql 的 like 问题,超强毕杀记!!!
Jan 18 PHP
ZF等常用php框架中存在的问题
Jan 10 PHP
PHP 飞信好友免费短信API接口开源版
Jul 22 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
Jun 17 PHP
你可能不知道PHP get_meta_tags()函数
May 12 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
Nov 19 PHP
php使用cookie实现记住用户名和密码实现代码
Apr 27 PHP
PHP根据图片色界在不同位置加水印的方法
Jul 01 PHP
php需登录的文件上传管理系统
Mar 21 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
Jan 07 PHP
Laravel框架基于ajax实现二级联动功能示例
Jan 17 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中filter_input函数用法分析
2014/11/15 PHP
PHP图像处理类库及演示分享
2015/05/17 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
PHP读取目录树的实现方法分析
2019/03/22 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
2019/10/01 PHP
jQuery实现视频作为全屏幕背景
2014/12/18 Javascript
浏览器环境下JavaScript脚本加载与执行探析之defer与async特性
2016/01/14 Javascript
JS模仿手机端九宫格登录功能实现代码
2016/04/28 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
2017/01/21 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
js实现无缝滚动图
2017/02/22 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
2017/09/19 Javascript
浅谈微信页面入口文件被缓存解决方案
2018/09/29 Javascript
详解Node.js amqplib 连接 Rabbit MQ最佳实践
2019/01/24 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
layui实现鼠标移动到单元格上显示数据的方法
2019/09/11 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
python冒泡排序算法的实现代码
2013/11/21 Python
Python中暂存上传图片的方法
2015/02/18 Python
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
python在文本开头插入一行的实例
2018/05/02 Python
Python3离线安装Requests模块问题
2019/10/13 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
python实现微信打飞机游戏
2020/03/24 Python
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
美国最大的宠物用品零售商:PetSmart
2016/11/14 全球购物
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
俄罗斯儿童和青少年服装、鞋子及配件的在线商店:Orby
2020/02/20 全球购物
村优秀党员事迹材料
2014/01/15 职场文书
省优秀教师事迹材料
2014/01/30 职场文书
党员教师一句话承诺
2014/05/30 职场文书
2014坚持党风廉政建设思想汇报
2014/09/18 职场文书
遗失证明范文
2015/06/19 职场文书
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫