php foreach id是否存在数组_请纠正这 5 个 PHP 编码小陋习

4ff93802b75231057d72f9cb968bb388.png

在做过大量的代码审查后,我经常看到一些重复的错误,以下是纠正这些错误的方法。

在循环之前测试数组是否为空

$items = [];

// ...

if (count($items) > 0) {

foreach ($items as $item) {

// process on $item ...

}

}

foreach以及数组函数 (array_*) 可以处理空数组。

·        不需要先进行测试

·        可减少一层缩进

$items = [];

// ...

foreach ($items as $item) {

// process on $item ...

}

将代码内容封装到一个 if 语句汇总

functionfoo(User $user) {

if (!$user->isDisabled()) {

// ...

// long process

// ...

}

}

这不是 PHP 特有的情况,不过我经常碰到此类情况。你可以通过提前返回来减少缩进。

所有主要方法处于第一个缩进级别

functionfoo(User $user) {

if ($user->isDisabled()) {

return;

}

// ...

// 其他代码

// ...

}

多次调用 isset 方法

你可能遇到以下情况:

$a = null;

$b = null;

$c = null;

// ...

if (!isset($a)|| !isset($b) || !isset($c)) {

throw newException("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 newException("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']

}

echosprintf方法一起使用

$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

}

697b1f6dca5e31453772e4fefd0b26e8.png

免责声明:本文内容转载自网络,其版权和著作权属于原作者。如果涉及侵权请尽快告知,我们将会在第一时间删除原文链接:https://segmentfault.com/a/1190000024487379

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276119.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1161转进制(C语言)

一:题目 二:思路分析 1.首先该题目让我们使用递归求十进制转其他进制 2.其次,我们要知道十进制转换为其他进制怎么转换,以例题所给的数据为例 由此图可以看出,十进制转换为其他进制,是辗转相除法&#xf…

PHP异常处理

转载链接:http://www.blogdaren.com/post-2030.html 版权声明:除非注明,本文由( manon )原创,转载请保留文章出处 本文链接:PHP register_shutdown_function函数详解 脚本时常死掉,而且并不总是那么好看. 我们可不想…

应对无协议脱欧 葡萄牙机场将为英籍旅客设快速通道

中新网1月18日电 据台湾《联合报》援引英媒报道,英国首相特蕾莎•梅的脱欧协议遭下院否决后,英国无协议脱欧的可能性变大。葡萄牙总理科斯塔17日表示,里斯本当局正对机场开设特殊通道进行规划,使英国旅客无论英国最后如何脱欧&…

javascript 日期控件

http://www.my97.net/dp/index.asp转载于:https://www.cnblogs.com/Ken-Cai/archive/2010/04/08/1707080.html

6轮字节前端校招面试经验分享

大家好,我是若川。最近金三银四,今天分享一篇字节前端校招面试经验的轻松好文,相信看完会有所收获。也欢迎点击下方卡片关注或者星标我的公众号若川视野因为我错过了2020年的秋招(ps: 那时候连数据结构与算法都还没学完&#xff0…

redis存opc_Redis集群的三种模式

一、主从模式通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。但是由于数据是存储在一台服务器上的,如果这台服务器出现硬盘故障等…

斥资近1亿港元,小米二次回购

1月21日消息,小米集团发布公告称,公司于1月18日回购了984.96万股B类普通股股票,占已发行股份0.041%,平均价为每股B类股10.1527港元,总计斥资近1亿港元。 这也是继1月17日首次回购后,小米集团连续两日出手进…

MySQL日期数据类型、时间类型使用总结

转载链接:http://www.jb51.net/article/23966.htm MySQL 日期类型:日期格式、所占存储空间、日期范围 比较。 日期类型 存储空间 日期格式 日期范围 ------------ --------- --------------------- -------------------------------…

ios macos_设计师可以从iOS 14和macOS Big Sur中学到什么?

ios macos重点 (Top highlight)With the introduction of iOS 14 and macOS Big Sur, we are the witness of the next big thing in UI Design. Changes are not so revolutionary like in iOS 7 years before, but they undoubtedly present the trend UI Designers will fol…

Web开发性能优化总结 转载

1. 使用存储过程, (如果在程序里用exec 存储过程 参数,这样执行似乎并没有快多少) 在数据库里是预编译的,也不需要在字符串传输上花费大量时间。 防sql注入攻击。 2. 尽量优化数据库语句,使逻辑尽量…

金三银四的腾讯、阿里、​字节等大厂前端社招面经

大家好,我是若川。最近金三银四,今天分享一篇腾讯、阿里、字节等大厂的前端社招面试经验的好文,相信看完会有所收获。也欢迎点击下方卡片关注或者星标我的公众号若川视野作者面了将近一个月,目前还没挂过,但由于各种因…

JS中创建函数的几种方式

使用 "函数声明" 创建函数 语法:* function 函数名([形参1,形参2...形参N]){* 语句...* } */function fun2(){console.log("这是我的第二个函数~~~");alert("哈哈哈哈哈");document.write("~~~~…

ssm提交post_我用spring mvc做,用post方式提交,后台获取不到参数值,用get方式就可以,什么问题...

展开全部因为form表单e68a843231313335323631343130323136353331333365646330的enctype编码方式不同导致的;enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。默认地,表单数据会编码为 "application/x-www-form-urlencoded"。就…

网页设计简约_简约网页设计的主要功能

网页设计简约重点 (Top highlight)Minimalism is synonymous with simplicity. Not quite. As the name suggests, minimalism is definitely not about opulent design. But the assumption that minimalism is design-less and plain is also wrong. Minimalism is simple ye…

MySQL_数据库数据类型(data type)介绍

转载链接:http://www.360sdn.com/mysql/2013/0511/78.html MySQL_数据库数据类型(data type)介绍 mysql数据库的数据类型(data type)分以下几种:数值类型,字符串类型 一、数值类型 MySQL 的数值类型可以大致划分为两个类别,一个是整数,另一…

Expo 2010 Japan Pavilion

^_^转载于:https://www.cnblogs.com/mmmhhhlll/archive/2010/04/16/1713680.html

深度对比学习Vue和React两大框架

作为国内应用最广的两个框架,Vue 和 React 是前端必须掌握的内容,也是面试的重点。但大多数读者都只擅长其中一个框架,当面试涉及到另一个框架的内容时,就答不好了。比如虚拟dom,两个框架中都有应用,面试官…

PHP Token(令牌)设计

转载链接:http://www.jb51.net/article/13756.htm PHP Token(令牌)设计 设计目标: 避免重复提交数据. 检查来路,是否是外部提交 匹配要执行的动作(如果有多个逻辑在同一个页面实现,比如新增,删除,修改放到一个PHP文件里操作) 这里所说的token是在页面显示的时候,写到…

java rwd_面向任务的设计-不仅限于Mobile First和RWD

java rwdWe already know that majority of solutions should start with a design for smartphones, we know that all websites should be responsive. Now, it’s time to think about holistic solutions with specific tasks adapted to all kind of devices.我们已经知道…

python中关键字 表示空类型_python中什么表示空类型

python中什么表示空类型?python中None表示空类型。表示该值是一个空对象,空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。可以将None赋值给任何变量,也…