PHP if elseif else 去掉大括号的操作在嵌套时要慎用

bloger 2019-11-25 PM 2620℃ 0条

149483370094833040.jpg
大家都知道再PHP编程语法中有一个非常人类的语法,我个人非常喜欢使用,在流程控制语句或者循环时,当只有一句的时候 大括号可以省略,例如:

$a = 1;
if($a >0) echo '省略大括号....';

输出结果:
省略大括号....

实际上跟以下代码一致:

$a = 1;
if($a >0){
 echo '省略大括号....';
}

输出结果:
省略大括号....

在有些情况下,我们为了精简代码、使得代码看起来更有逼格,很多时候就直接省去了大括号。那么我为何要说去掉大括号的操作要慎用?

  1. 主要在后期维护不利于阅读,结构不明确,容易让人产生疑惑。
  2. 在一些情况下容易导致逻辑出错。

下面我们来写一段代码:

$b = 2;
$c = 3;
$d = [1,2,3,4,5,6];
if ($b > 3 && $c < 1 )     if(in_array($b,$d)) echo 33333; 
elseif ($b > 1 && $c <= 3) if(in_array($b,$d)) echo 99999;
    

首先大家看一下这个代码会输出什么呢?初步一看是不是会输出:99999,实际上什么都不会输出。

为何?

原因是php解析器将elseif当作了第二if的逻辑判断,这样就导致了和我们预想的结果发生了巨大的变化(判断条件漏掉了)。

更改一下代码使逻辑生效:

if ($b > 3 && $c < 1 ) if(in_array($b,$d)) echo 33333; 
if ($b > 1 && $c <= 3) if(in_array($b,$d)) echo 99999;

代码输出正常结果:
99999

正常代码:

if ($b > 3 && $c < 1 ) {
    if(in_array($b,$d)) echo 33333;
}elseif ($b > 1 && $c <= 3) {
    if(in_array($b,$d)) echo 99999;
}

再流程控制嵌套时,建议加上大括号,不然有时候不仅误导别人,甚至有时候会误导自己!

标签: 流程控制

非特殊说明,本博所有文章均为博主原创。

评论啦~