PHP - 如果/否则,for,foreach,while - 没有花括号?

63

我一直想知道但从未弄明白的是PHP中的快捷方式。

我正在编写一个带有foreach循环的函数,并且里面只有一条语句。我尝试省略花括号,就像在if/else控制结构中一样,结果它能够正常工作而没有错误。

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

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

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

然后我想:"为什么这个可以工作?" 然后我省略了分号。仍然起作用。所以,我尝试在 foreach 循环内部使用 if/else 语句,而不使用花括号,再次,仍然起作用,没有错误。但是,foreach 循环现在真的结束/关闭了吗?

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

我至少又忘记了写分号,并且(如预期的)出现了解析错误。

所以我的一个大问题是:在哪些结构/循环/函数中可以省略花括号?我知道可以在ifelse中这样做。但是whileforforeach呢?

是的,我知道编写没有花括号的代码不安全、不明智等等,并且有像$condition ? true : false;if: doSomething(); endif;endfor;endforeach;这样的缩写。我不想学习缩写,我只想理解在什么情况下可以省略花括号。


4
顺便提一下,在右括号后面不需要加分号。这样做的语法意义是在它们之间添加一个空语句。这对于所有类C语言来说都是正确的,但在C和C++中对structclass的声明除外。 - Eric
你需要学习语句和表达式的区别,才能理解何时可以省略花括号。然后,仍然需要对表达式的内聚性有一个强大的理解。 - mario
14个回答

0

答案很简单。在C/C++中也是一样的。

if、if/else、if/else if/else和循环 => 如果下一条语句只有一行,可以省略花括号。

例如:

for($i= 0; $i<=100; $i++)
{
    if($i % 7 == 0)
    {   
        echo $i . "<br>";
    }

}

它也可以这样写:

for($i= 0; $i<=100; $i++) if($i % 7 == 0) echo $i . "<br>";

-1

enter image description here

在我生命中的某个时刻,如果下一条语句只有一行,我也省略了花括号。
当时我认为我的代码看起来很酷,很简洁,而且我应该尽可能地节省代码行数。
但是我意识到,在长期运行中,明确表达更有帮助,特别是关于项目的可维护性方面。
此外,我们永远不应该为微小的性能问题牺牲重要的事情。

-1

PHP 的简写表达式自 PHP 5.3 版本以来就可用了。

$condition ? $value_if_true : $value_if_false

$a ? $b : ( $c ? $d : ( $e ? $f : $g ) )

-1

当您在代码块中执行单个动作时,省略 {} 大括号是完全可以的,但如果您将在该块上执行两个或更多的操作,则需要为它们使用 {} 大括号,否则会出现错误。

// Single action
    if (true)
        return 'true';

// Compound
    if (true) {
        $value = true;
        return $value;
    }

在单个操作中,您可以省略{}大括号,因为您将直接返回值。
在复合操作中,您必须放置大括号,因为您将执行两件事:
1. 将布尔值'true'分配给$value 2. 返回该$value 我希望这有意义。

不,这没道理,也不好。在写自己的答案之前,请考虑阅读现有的答案。 - Your Common Sense

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接