【问题标题】:php foreach syntax without {} [duplicate]没有{}的php foreach语法[重复]
【发布时间】:2014-01-31 14:22:36
【问题描述】:

我正在阅读一篇 php 到 python 的文章,该文章讨论了相当于 foreach() 的 python,他们给出了 php 代码示例

foreach ( $items as $item )
    echo $item;

这是一个没有{}的有效语法吗?我总是看到它写成

foreach ( $items as $item ){
    echo $item;
}

我在本地通过 coderunner 运行了第一个示例,看看它是否会通过错误,但它没有,这是一个有效的语法使用还是我会遇到问题?

【问题讨论】:

  • 只有可读性问题。
  • 不要使用它,即使使用if's也不要使用它这种语法对代码阅读器没有任何帮助
  • 我认为如果foreach的内容仅在一行上,它是有效的。if也是如此
  • @Mave 谢谢,很好的重复查找!
  • Google 中“无括号的 foreach”的第一个结果

标签: php foreach


【解决方案1】:

foreach{ ... } 视为两种不同且独立的语言结构。

原来foreach的语法是

foreach (...)
    statement

echo $item; 是一个有效的声明。

{ // any code here } 也是一个有效的语句。

【讨论】:

    【解决方案2】:

    是的,这是有效的。我经常看到这个写成

    <?php 
    foreach($array as $element): 
      //do something 
    endforeach; 
    ?>
    

    见 - http://www.php.net/manual/en/control-structures.foreach.php

    【讨论】:

    • 这是不同的,用于模板更多。它支持开头和结尾之间的 2 行或更多行
    【解决方案3】:

    假设foreach 循环“内部”有一个语句是有效的。这实际上概括了foreach 之外,它适用于forwhileif 等。此外,它并非特定于 PHP,许多语言都支持这种单语句简写。

    【讨论】:

      【解决方案4】:

      是的,这是一个有效的例子。只有当有一个语句要执行,或者语句级联到另一个条件/语句时,它才会起作用。

      因此,虽然下面的示例无效,(即只有第一个回显将在循环内执行)。

      foreach( ... )
          echo ...
          echo ...
      

      这个例子还是

      foreach( ... )
          if( ... )
              echo ...    
      

      【讨论】:

      • "语句中的一行" --- ? echo 'foo \n bar';(其中\n 是一个真正的新行)。或echo 1; echo 2; --- 还是一行。它与那里的行数无关。必须重写它以删除任何提及的行。
      • 你说得对,已解决。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      • 2014-05-15
      • 1970-01-01
      • 2011-12-27
      • 2018-10-13
      • 2015-06-05
      相关资源
      最近更新 更多