常见的5个PHP编码小陋习以及优化实例讲解
在做过大量的代码审查后,我经常看到一些重复的错误,以下是纠正这些错误的方法。
在循环之前测试数组是否为空
$items=[];
//...
if(count($items)>0){
foreach($itemsas$item){
//processon$item...
}
}
foreach以及数组函数(array_*)可以处理空数组。
不需要先进行测试可减少一层缩进
$items=[];
//...
foreach($itemsas$item){
//processon$item...
}
将代码内容封装到一个if语句汇总
functionfoo(User$user){
if(!$user->isDisabled()){
//...
//longprocess
//...
}
}
这不是PHP特有的情况,不过我经常碰到此类情况。你可以通过提前返回来减少缩进。
所有主要方法处于第一个缩进级别
functionfoo(User$user){
if($user->isDisabled()){
return;
}
//...
//其他代码
//...
}
多次调用isset方法
你可能遇到以下情况:
$a=null;
$b=null;
$c=null;
//...
if(!isset($a)||!isset($b)||!isset($c)){
thrownewException("undefinedvariable");
}
//或者
if(isset($a)&&isset($b)&&isset($c){
//processwith$a,$bet$c
}
//或者
$items=[];
//...
if(isset($items['user'])&&isset($items['user']['id']){
//processwith$items['user']['id']
}
我们经常需要检查变量是否已定义,php提供了isset函数可以用于检测该变量,而且该函数可以一次接受多个参数,所以一下代码可能更好:
$a=null;
$b=null;
$c=null;
//...
if(!isset($a,$b,$c)){
thrownewException("undefinedvariable");
}
//或者
if(isset($a,$b,$c)){
//processwith$a,$bet$c
}
//或者
$items=[];
//...
if(isset($items['user'],$items['user']['id'])){
//processwith$items['user']['id']
}
echo和sprintf方法一起使用
$name="JohnDoe";
echosprintf('Bonjour%s',$name);
看到这段代码你可能会想笑,不过我的确这样写了一段时间,而且我仍然会看到很多这样写的!其实echo和sprintf并不需同时使用,printf就可以完全实现打印功能。
$name="JohnDoe";
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编码小陋习内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!