首頁>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; .我不想學習速記,我只想了解何時和何處可以省略大括號的條件。

最新回復
  • 5月前
    1 #

    当省略大括號時,它將仅將下一个語句视為正文 情况。

    if ($x) echo 'foo';
    

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

    但請記住

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

    始终print"欄"

    內部則相反: if 只看下一个表達式,但是PHP在 {}中對待所有內容 作為單个"分組"表達式。

    与其他控製語句( foreach ,依此類推)

  • 5月前
    2 #

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

    明確是 always 比隱式更好.

    谁知道您何時需要迴去修改旧代碼.錯過這些东西很容易,做不到任何事情.

  • 5月前
    3 #

    如果您只有一个引數,它將很好用! 但是,如果您想省略花括號,則可以使用冒號並結束。 例如:

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

  • 5月前
    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练习 .因此,您的大問题没有答案.人们應该主要考虑以下問题。

    您編寫的代碼易於維護吗?

    您能為自己迴答吗?省去花括號就能赢得胜利。

  • 5月前
    5 #

    我在PHP模板中省略了花括號.例如.您可以如下使用迴圈:

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

  • hibernate:JPA 20多對多附加欄
  • javascript:正則表達式提取子字元串,由於某種原因返迴2个結果