常见的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学习之输出字符串(echo,print,printf,print_r和var_dump)
Apr 17 PHP
php通过COM类调用组件的实现代码
Jan 11 PHP
php计算数组不为空元素个数的方法
Jan 27 PHP
PHP程序员基本要求和必备技能
May 09 PHP
PHP生成图片验证码、点击切换实例
Jun 25 PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
Sep 22 PHP
php获取twitter最新消息的方法
Apr 14 PHP
typecho插件编写教程(二):写一个新插件
May 28 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
Sep 25 PHP
PHP请求Socket接口测试实例
Aug 12 PHP
thinkPHP自动验证机制详解
Dec 05 PHP
如何在Laravel5.8中正确地应用Repository设计模式
Nov 26 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 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
PHPThumb PHP 图片缩略图库
2012/03/11 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
用js实现的一个Flash滚动轮换显示图片代码生成器
2007/03/14 Javascript
javascript 新浪背投广告实现代码
2009/07/07 Javascript
Javascript 键盘事件的组合使用实现代码
2012/05/04 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
2013/10/18 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
node.js中的fs.readdirSync方法使用说明
2014/12/17 Javascript
jQuery中die()方法用法实例
2015/01/19 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
2015/10/21 Javascript
js实现浏览器倒计时跳转页面效果
2016/08/12 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
Angular 5.x 学习笔记之Router(路由)应用
2018/04/08 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
jquery实现简单自动轮播图效果
2020/07/29 jQuery
Python3.x和Python2.x的区别介绍
2013/02/12 Python
python使用any判断一个对象是否为空的方法
2014/11/19 Python
python使用wxpython开发简单记事本的方法
2015/05/20 Python
在Windows系统上搭建Nginx+Python+MySQL环境的教程
2015/12/25 Python
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
python实现可视化动态CPU性能监控
2018/06/21 Python
python3人脸识别的两种方法
2019/04/25 Python
python 回溯法模板详解
2020/02/26 Python
python实现用户名密码校验
2020/03/18 Python
DC Shoes荷兰官方网站:美国极限运动品牌
2019/10/22 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
介绍一下常见的木马种类
2014/11/15 面试题
家长写给孩子的评语
2014/04/18 职场文书
在校实习生求职信
2014/06/18 职场文书
小学运动会宣传稿
2015/07/23 职场文书
JS的深浅复制详细
2021/10/16 Javascript