大家都知道再PHP编程语法中有一个非常人类的语法,我个人非常喜欢使用,在流程控制语句或者循环时,当只有一句的时候 大括号可以省略,例如:
$a = 1;
if($a >0) echo '省略大括号....';
输出结果:
省略大括号....
实际上跟以下代码一致:
$a = 1;
if($a >0){
echo '省略大括号....';
}
输出结果:
省略大括号....
在有些情况下,我们为了精简代码、使得代码看起来更有逼格,很多时候就直接省去了大括号。那么我为何要说去掉大括号的操作要慎用?
- 主要在后期维护不利于阅读,结构不明确,容易让人产生疑惑。
- 在一些情况下容易导致逻辑出错。
下面我们来写一段代码:
$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;
}
再流程控制嵌套时,建议加上大括号,不然有时候不仅误导别人,甚至有时候会误导自己!