首页>Program>source

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;

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

所以我的主要问题是:什么时候可以省略花括号,以及在哪个结构/循环/功能中? 我知道我绝对可以在 if中这样做 和 else .但是 while呢 , forforeach

是的,我知道这是不安全的,聪明的,无论什么时候都没有花括号就可以编码,而且还有像 $condition ? true : false;这样的速记 和 if: doSomething(); endif;endfor;endforeach; .我不想学习速记,我只想了解何时和何处可以省略大括号的条件。

最新回答
  • 2021-1-12
    1 #

    当省略大括号时,它将仅将下一个语句视为正文 情况。

    if ($x) echo 'foo';
    

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

    但请记住

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

    始终print"栏"

    内部则相反: if 只看下一个表达式,但是PHP在 {}中对待所有内容 作为单个"分组"表达式。

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

  • 2021-1-12
    2 #

    在某些地方您可以,但您绝对不可以.

    明确是 always 比隐式更好.

    谁知道您何时需要回去修改旧代码.错过这些东西很容易,做不到任何事情.

  • 2021-1-12
    3 #

    如果您只有一个参数,它将很好用! 但是,如果您想省略花括号,则可以使用冒号并结束。 例如:

    if(a < 1 ) :
        echo "a is less than 1";
    else :
        echo "a is greater than 1";
    endif;
    

  • 2021-1-12
    4 #

    As have said you don't wanna learn about shorthand's 和被接受的答案为省略 curly braces提供了很好的例子 ,但要添加一些内容.如您所见,可以省略 curly braces 如果是 if ($x) echo 'foo'; .代码没有问题,没有性能或其他问题,其他开发人员都可以读取.该示例还向您显示,如果您编写

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

    代替

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

    您可能会在 bar遇到意外结果 是在您不希望print时print的,并且如果您的代码中充满了这样的语句,那么这将使您更难以阅读自己的代码,而其他人则更难以阅读。

    I don't wanna learn about shorthand's I just want to understand the conditions about when and where it is possible to omit the curly brackets.

    这些内容密切相关,因此,如果您真的想了解在哪里可以省略大括号,则必须了解或至少了解速记,请阅读

    PHP控制结构

    一般的PHP三元条件运算符和表达式

    So my big question is: When can I omit the curly braces and in which structure/loop/function?

    不需要花括号,但是出于可读性和维护目的,许多开发人员认为不包含花括号就不好了.当您可以省略花括号时,前2个链接应为您提供做出自己的决定所需的信息。 例如,下面的代码片段并没有什么错,它们都完全相同。

    With curly brace

    if (PHP_VERSION_ID < 70000)
    {
        print "PHP >= 7.0 required yours is ";
        print phpversion();
        print "\n";
        exit(1);
    }
    

    Is same as

    if (PHP_VERSION_ID < 70000) :
        print "PHP >= 7.0 required yours is ";
        print phpversion();
        print "\n";
        exit(1);
    endif;
    

    Or you can use the dot operator

    if (PHP_VERSION_ID < 80000)
        (print "PHP >= 7.0 required yours is ") . (print phpversion()) . (print "\n") . exit(1);
    

    And you can make use of the ternary conditional operator and even omit if 除了省略花括号外,它本身也很重要

    (PHP_VERSION_ID > 70000) ?: (print "PHP >= 7.0 required yours is ") . (print phpversion()) . (print "\n") . exit(1);
    

    由于我们仅print,因此我们可以缩短print时间并剥离一些 print string functions 在这里可以表示不带花括号的语句中的多个功能

    (PHP_VERSION_ID > 70000) ?: (print "PHP >= 7.0 required yours is " . phpversion() . "\n") . exit(1);
    

    As from php 7 we can use Null coalescing operator

    (PHP_VERSION_ID > 70000) ?: null ?? (print "PHP >= 7.0 required yours is ".phpversion() . "\n") . exit(1);
    

    可以看到,有很多方法可以得到完全相同的结果.这不仅适用于这个 if 例子,但是可以用 structure/loop/function练习 .因此,您的大问题没有答案.人们应该主要考虑以下问题。

    您编写的代码易于维护吗?

    您能为自己回答吗?省去花括号就能赢得胜利。

  • 2021-1-12
    5 #

    我在PHP模板中省略了花括号.例如.您可以如下使用循环:

    <ul>
        <?php foreach ($var as $value): ?>
            <li><?php echo $value; ?></li>
        <?php endforeach; ?>
    </ul>
    

  • hibernate:JPA 20多对多附加栏
  • javascript:正则表达式提取子字符串,由于某种原因返回2个结果