一尘不染

PHP-如果/其他,for,foreach,而-没有花括号?

php

真正想知道但从未发现的是PHP中的快捷方式。

我目前正在用一个foreach循环在一个函数内编码一个函数。我试图省略花括号,就像您在if / else控制结构中所做的那样,它可以正常工作。没有错误。

foreach($var as $value)
    $arr[] = $value;

现在,我尝试以相同的方式使用它,但在其中放置了一个if / else块。再次,工作,没有错误。

foreach($var as $value)
    if(1 + 1 == 2) {
        $arr[] = $value;
    };

然后,我以为“这为什么起作用?” 省略了分号。还在工作。因此,我尝试在ifeach循环中使用if /
else语句,但不使用花括号,仍然可以正常工作,并且没有错误。但是,foreach循环现在真的关闭/结束了吗?

foreach($var as $value)
    if(1 + 1 == 2)
        $arr[] = $value;

至少我再次省略了分号,并且(如预期的那样)发生了解析错误。

所以我的大问题是:什么时候可以省略花括号,以及在哪个结构/循环/功能中?我知道我绝对可以在ifelse。可是你知道whileforforeach

是的,我知道这是不安全,聪明的,无论使用哪种花括号而不用花括号进行编码,并且都有诸如$condition ? true : false;if: doSomething(); endif;endfor;和的简写形式endforeach;。我不想了解速记,我只是想了解有关何时何地可以省略大括号的条件。


阅读 367

收藏
2020-05-29

共1个答案

一尘不染

当省略括号时,它将仅将下一个语句视为条件主体。

if ($x) echo 'foo';

是相同的

if ($x) { echo 'foo'; }

但请记住

if ($x)
  echo 'foo';
  echo 'bar';

始终 打印“栏”

在内部,这是另一种方式:if仅查看下一个表达式,但是PHP将所有内容都{}视为单个“分组”表达式。

其他控制语句(foreach,依此类推)相同

2020-05-29