PHP - If/else, for, foreach, while - 没有大括号?

2022-08-30 09:42:24

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

我目前正在用一个循环编写一个函数,里面只有一个语句。我试图省略大括号,就像你可以在if/else控制结构中做的那样,它的工作原理。无错误。foreach

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

现在我试图以同样的方式使用它,但是在里面放一个if/else块。再次,工作并且没有错误。

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

然后,我想到了“为什么这有效?”,并省略了结束分号。仍在工作。因此,我尝试使用if/else语句,在foreach循环内没有大括号,并且再次使用,仍然有效并且没有错误。但是,现在前循环真的关闭/结束吗?

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

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

所以我最大的问题是:我什么时候可以省略大括号,在哪个结构/循环/函数中?我知道我绝对可以在 和 中这样做。但是呢,和呢?ifelsewhileforforeach

是的,我知道它不安全,聪明,无论在没有大括号的情况下编码,并且有像和,和这样的速记。我不想学习速记,我只想了解何时何地可以省略大括号的条件。$condition ? true : false;if: doSomething(); endif;endfor;endforeach;


答案 1

当您省略大括号时,它只会将下一个语句视为条件的主体。

if ($x) echo 'foo';

与 相同

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

但请记住

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

将始终打印“条形图”

在内部,情况恰恰相反:只看下一个表达式,但PHP将所有内容视为单个“分组”表达式。if{}

其他控制语句(等)相同foreach


答案 2

有些地方你可以,但你永远不应该。

显式总是比隐式更好。

谁知道你什么时候必须回去修改旧代码。很容易错过这些东西,这样做没有任何收获。


推荐