请纠正这5个PHP编码小陋习

Souleigh ✨ 等级 606 0 0

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

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

$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); 

看到这段代码你可能会想笑,不过我的确这样写了一段时间,而且我仍然会看到很多这样写的!其实echosprintf并不需同时使用,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_arrayarray_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
} 

原文地址:https://dev.to/klnjmm/5-bad-habits-to-lo...

译文地址:https://learnku.com/php/t/49583

收藏
评论区

相关推荐

请纠正这5个PHP编码小陋习
在做过大量的代码审查后,我经常看到一些重复的错误,以下是纠正这些错误的方法。 在循环之前测试数组是否为空 $items ; // ... if (count($items) 0) { foreach ($items as $item) { // process on $item ...
nginx安全配置
安全是一个重要的问题,必须引起注意。 1. nginx介绍 nginx本身不能处理PHP(http://www.ttlsa.com/php/ "php"),它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。nginx一般是把请求发fastcgi管理进程处理,fastcgi管理进程选择cgi子
NGINX 文件类型解释漏洞整理
nginx文件类型错误解析漏洞 www.xxx.com/1.jpg 内容为PHP 代码,如 <?php phpinfo(); ?> 后面加任意 .php www.xxx.com/1.jpg/xxx.php 导致代码被执行 php.ini cgi.fix\_pathinfo=1 PHP\_INI\_ALL
PHP 技能精进之 PHP
PHP-FPM 提供了更好的 PHP 进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。那么当我们谈论 PHP-FPM 多进程模型的时候,作为 PHPer 的你了解多少呢? 首先,让我们一起看几个问题: ①:PHP-FPM 启动进程的方式主要有哪几种,区别是什么? ②:PHP-FPM,是主进程接收请求转给子进程,还是子进程单独接收请求并处理
PHP微信开发入门(一)
微信的接入在填写服务器URL时指向TOKEN验证的php文件,列如http://localhost/wlink.php * 验证示例代码 <?php //如果接收到验证信息则调用valid()函数进行验证 if (isset ( $_GET ['echostr'] )) { valid (); } else
PHP教程
PHP教程-php读取输出其他文件方法 人们往往想到出现一些关于访问很缓慢,有白页现象,要是测试环境你也就重启一下PHP的php-fpm进程发现又好了,隔一段时间又出类似的问题,本期我们邀请到了 兄弟连PHP教育[www.lampbrother.net](https://www.oschina.net/action/GoToLink?url=http%3A
LNMP架构中常见的502错误
**1.配置错误** 因为nginx找不到php-fpm了,所以报错,一般是fastcgi\_pass后面的路径配置错误了,后面可以是socket或者是ip:port **2.资源耗尽** lnmp架构在处理php时,nginx直接调取后端的php-fpm服务,如果nginx的请求量偏高,我们又没有给php-fpm配置足够的子进程,那
Bootstrap 结合 PHP ,做简单的登录以及注册界面及功能
登录实现 ==== HTML代码 <div class="container"> <?php if (isset($error_msg)): ?> <div class="alert alert-danger" role="alert"><?php echo $error_msg; ?></div>
FastCGI 协议分析与C语言实现实例
考虑让我的 web server 增加对 PHP 的支持,这就要用到 php 解析器来将客户端请求的 php 文件解析为静态资源,再由我的 web server 将其返回到客户端,php-fpm 就可以来帮我们完成这个工作。可是我的 web server 如何与 php-fpm 通信呢? 接下来就是本文的主角:**FastCGI** 。 **FastCGI
Kafka学习之(三)Centos下给PHP开启Kafka扩展(rdkafka)
Centos版本:Centos6.4,PHP版本:PHP7。 在上一篇文章中使用IP为192.168.9.154的机器安装并开启了Kafka进行了简单测试,充当了Kafka服务器。 本篇文章新开启一台IP为192.16.9.157的机器给PHP开启扩展。 找到github的扩展下载地址,这里是php-rdkafka,虽然php有一个扩展是php-kaf
Larave
作者 -- 本文由 张舫 童鞋投稿 > 同时也欢迎更多的小伙伴投稿 开发需求 ---- PHP >= 7.0.0OpenSSL PHP ExtensionPDO PHP ExtensionMbstring PHP ExtensionTokenizer PHP ExtensionXML PHP ExtensionApache/NginxMySQ
PHP、golang 如何播放mp4文件
<?php function PutMovie($file) { header("Content-type: video/mp4"); header("Accept-Ranges: bytes"); $size = filesize($file); if(is
PHP导出exec xlswriter扩展测试
php-xlswrite [https://github.com/viest/php-ext-xlswriter](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fgithub.com%2Fviest%2Fphp-ext-xlswriter) 100万数据,导出数据列较小的情况下,仅需几
PHP的前世今生
大家都知道,Facebook、淘宝等早期都是用PHP写的,在中国,PHP在百度、新浪、腾讯这三大互联网公司中应用比较多。 自1995年由丹麦人Rasmus Lerdorf(雷斯莫斯·勒道夫) 创建 PHP 以来, PHP 语言经历了激烈的演进。 ### PHP/FI - 1995年 _摘要:用Perl写的小工具_ PHP 继承自一个老的工程,名叫 P
PHP配置优化:php
> PHP-FPM是一个PHP FastCGI管理器,php-fpm.conf配置文件用于控制PHP-FPM管理进程的相关参数,比如工作子进程的数量、运行权限、监听端口、慢请求等等。 我们在编译安装PHP的时,在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。PHP-FPM配置文件为 php-fpm.conf,其语法类似 p