常见的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的栏目导航程序
Oct 09 PHP
PHP 替换模板变量实现步骤
Aug 24 PHP
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
Jun 11 PHP
PHP高级对象构建 多个构造函数的使用
Feb 05 PHP
解析获取优酷视频真实下载地址的PHP源代码
Jun 26 PHP
PHP对象相互引用的内存溢出实例分析
Aug 28 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
Nov 12 PHP
php对象和数组相互转换的方法
May 12 PHP
php自动给网址加上链接的方法
Jun 02 PHP
Smarty最简单实现列表奇偶变色的方法
Jul 01 PHP
PHP中set error handler函数用法小结
Nov 11 PHP
WordPress免插件实现面包屑导航的示例代码
Aug 20 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数组操作汇总 php数组的使用技巧
2011/07/17 PHP
php定界符
2014/06/19 PHP
php使用GeoIP库实例
2014/06/27 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
2016/03/14 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
PHP批斗大会之缺失的异常详解
2019/07/09 PHP
网页中的图片的处理方法与代码
2009/11/26 Javascript
Jquery 高亮显示文本中重要的关键字
2009/12/24 Javascript
JS中图片缓冲loading技术的实例代码
2013/08/29 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
jQuery中:file选择器用法实例
2015/01/04 Javascript
js实现页面跳转的几种方法小结
2016/05/16 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
JavaScript实现鼠标点击导航栏变色特效
2017/02/08 Javascript
jquery mobile实现可折叠的导航按钮
2017/03/11 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
浅谈vue路径优化之resolve
2017/10/13 Javascript
vue实现在表格里,取每行的id的方法
2018/03/09 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
JavaScript中Dom操作实例详解
2019/07/08 Javascript
微信小程序如何访问公众号文章
2019/07/08 Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
2020/07/13 Javascript
vue中使用vue-pdf的方法详解
2020/09/05 Javascript
解决Vue大括号字符换行踩的坑
2020/11/09 Javascript
Python+selenium 获取一组元素属性值的实例
2018/06/22 Python
Python supervisor强大的进程管理工具的使用
2019/04/24 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
2019/09/25 Python
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
《春到梅花山》教学反思
2014/04/16 职场文书
学校地质灾害防治方案
2014/06/10 职场文书
房地产端午节活动方案
2014/08/24 职场文书
教师党的群众路线学习心得体会
2014/11/04 职场文书
2015年专项整治工作总结
2015/04/03 职场文书
公司行政主管岗位职责
2015/04/09 职场文书
运动会广播稿100字
2015/08/19 职场文书
React 并发功能体验(前端的并发模式)
2021/07/01 Javascript