【问题标题】:PHP conditionals, brackets needed?PHP条件,需要括号?
【发布时间】:2010-09-27 17:33:49
【问题描述】:

我刚刚浏览了一个论坛,有人询问他们在网上找到的一个 PHP 文件。它在代码中有几个这样的地方:

if ($REMOTE_ADDR == "") $ip = "no ip"; else $ip = getHostByAddr($REMOTE_ADDR);

我一直认为如果条件为真,需要用括号括起来你想做的事情。是否有其他选择,例如它是否在您不在的同一行上?

还有这样一行: if ($action != ""): mail("$adminaddress","Visitor Comment from YOUR SITE",

我的直觉是说这行不通,但我也不知道它是否是一个过时的 PHP 文件并且它曾经可以工作?

【问题讨论】:

    标签: php brackets conditional


    【解决方案1】:

    你可以做这样的 if else 语句:

    <?php
    if ($something) {
       echo 'one conditional line of code';
       echo 'another conditional line of code';
    }
    
    
    if ($something) echo 'one conditional line of code';
    
    if ($something)
    echo 'one conditional line of code';
    echo 'a NON-conditional line of code'; // this line gets executed regardless of the value of $something
    ?>
    



    然后你也可以用另一种语法写 if - else:

    <?php
    if ($something):
       echo 'one conditional line of code';
       echo 'another conditional line of code';
    elseif ($somethingElse):
       echo 'one conditional line of code';
       echo 'another conditional line of code';
    else:
       echo 'one conditional line of code';
       echo 'another conditional line of code';
    endif;
    ?>
    



    使用替代语法,您也可以像这样退出解析模式:

    <?php
    if ($something):
    ?>
    one conditional line of code<br />
    another conditional line of code
    <?php
    else:
       echo "it's value was: $value<br />\n";
    ?>
    another conditional line of code
    <?php
    endif;
    ?>
    

    但这很快就会变得非常混乱,我不推荐使用它(可能除了模板逻辑)。



    并使其完整:

    <?php
    $result = $something ? 'something was true' : 'something was false';
    echo $result;
    ?>
    
    equals
    
    <?php
    if ($something) {
       $result = 'something was true';
    } else {
       $result = 'something was false';
    }
    echo $result;
    ?>
    

    【讨论】:

    • 哇,我不知道有这么多用于构建 php 代码的选项。谢谢!
    • 如果你是最后一个例子,你不需要额外的变量: echo $something ? '某事是真的' : '某事是假的';
    • 我知道它有效,但我想我在某处读到它是一个未记录的结果(因此可能会在未来的版本中改变)。不过不确定。
    • 你也可以使用 elseif 来处理这样的单行条件代码吗? if ($something) $result = '某事是真的'; elseif ($something_else) $result = '别的东西是真的'; else $result = '没有什么是真的';
    • “elseif”真的可以将if条件留空吗? (即“elseif:”有效吗?)
    【解决方案2】:

    更详细地说,大括号是可选的原因是语法看起来像:

    if(CONDITION) BLOCK
    [elseif(CONDITION) BLOCK]
    [else BLOCK]
    

    BLOCK 可以是单个语句:

    foo();
    

    或者它可以是一组用大括号括起来的语句:

    {
        foo();
        bar();
    }
    

    【讨论】:

      【解决方案3】:

      大括号(不是方括号)在 PHP 中是可选的,就像在大多数类似 C 的语法中一样。也许您正在考虑 Perl;对于这种形式的 if 语法,它们是必需的。

      冒号是 PHP 支持的另一种控制结构形式。我讨厌它,但有些人(尤其是模板系统设计师,显然)喜欢它。

      【讨论】:

      • 谢谢,一定是我先学了 Perl,一定是我更严格的一面认为这是错误的。
      【解决方案4】:

      在我看来

      if ($REMOTE_ADDR == "") $ip = "no ip"; else $ip = getHostByAddr($REMOTE_ADDR);
      

      是有效的,但比阅读更难:

      if ($REMOTE_ADDR == "") {
          $ip = "no ip"; 
      } else {
          $ip = getHostByAddr($REMOTE_ADDR);
      }
      

      【讨论】:

      • 我喜欢 if(statement) process; else process2; 都在单独的行上。除了没有括号外,它看起来就像带括号的那个。
      【解决方案5】:

      9 年过去了,我很惊讶没有人提到 ternary operator

      $ip = ($REMOTE_ADDR == "") ? "no ip" : getHostByAddr($REMOTE_ADDR);
      

      恕我直言,分配更清晰 - 因为它会导致变量被分配,就像通常的变量分配一样。

      【讨论】:

      • @Jacco 的回答提供了这个例子。
      【解决方案6】:

      是的,不包括大括号是允许的,尽管我多次听到不使用该语法的两个原因:

      1. 很难阅读。对其他程序员来说不太明显。
      2. 如果您想在 if 中添加一些内容,那么您需要添加大括号,这在您第一次编码之后会更难,因为大多数编辑器会为您添加右大括号。

      另外,是的,冒号语法是有效的。可以在这里找到替代方案:http://php.net/manual/en/control-structures.alternative-syntax.php

      【讨论】:

      • --- 1. 更难阅读。对另一个程序员来说不太明显。这是有争议的。许多程序员喜欢用更少的垂直滚动来“吸收”更多的代码(我并不是说你必须在单行上写几个;;;指令)这样你可以更好地看到“更大的画面”。但我同意,调试模式总是更好。
      【解决方案7】:
      brackets are needed to enclose what you want to do if the condition is true
      

      我想不出任何需要这个的语言

      【讨论】:

        猜你喜欢
        • 2012-04-02
        • 2011-03-29
        • 1970-01-01
        • 2014-08-09
        • 1970-01-01
        • 2014-12-23
        • 1970-01-01
        • 1970-01-01
        • 2022-07-16
        相关资源
        最近更新 更多