programing

PHP - If/else, for, for, for, while, curly brace 없이?

subpage 2023. 7. 23. 14:16
반응형

PHP - If/else, for, for, for, while, curly brace 없이?

정말 알고 싶지만 결코 발견되지 않은 것은 PHP의 바로 가기입니다.

현재함코중입다니는하로 하고 있습니다.foreach문 하나만 안쪽에 있는 루프입니다.if/else control 구조에서 할 수 있는 것처럼 colly brace를 생략하려고 노력했고 작동합니다.오류 없음.

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

이제는 같은 방법으로 사용하려고 했지만 안에 if/else block을 넣었습니다.다시 말하지만, 작동하고 오류는 없습니다.

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

그리고는 '이게 왜 되는 거야?'라고 생각하고 닫는 세미콜론을 생략했습니다.아직 일하고 있습니다.그래서 저는 각 루프에 대해 곱슬곱슬한 중괄호를 사용하지 않고 if/else 문을 사용하려고 시도했고, 여전히 작동하고 오류가 없습니다.그런데 지금 각 루프가 정말 닫혔나요?

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

적어도 나는 닫는 세미콜론을 다시 생략했고 (예상대로) 구문 분석 오류가 발생했습니다.

그래서 저의 큰 질문은 다음과 같습니다.곱슬곱슬한 중괄호는 언제 생략할 수 있으며 어떤 구조/루프/함수에서 생략할 수 있습니까?나는 내가 확실히 그렇게 할 수 있다는 것을 압니다.if그리고.else하지만 그럼.while,for그리고.foreach?

저는 곱슬곱슬한 것이 , 그고네안, 저그이않다지있니것, 지요교없것든, 리무코이하는이엇곱, 은화드기정슬머리똑똑하습고을다알는하와 같은 가 있다는 것을 알고 . 그리고 다음과 같은 속기가 있습니다.$condition ? true : false;그리고.if: doSomething(); endif;,endfor;그리고.endforeach;저는 속기에 대해 배우고 싶지 않습니다. 저는 단지 언제 어디서 곱슬곱슬한 괄호를 생략할 수 있는지에 대한 조건을 이해하고 싶습니다.

중괄호를 생략하면 다음 문만 조건의 본문으로 처리됩니다.

if ($x) echo 'foo';

와 동일합니다.

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

하지만 기억하세요.

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

항상 "bar"를 인쇄합니다.

입니다: 내적으그반대니다입는로부▁intern다니반입.if이지만, 는 모든 것을 만볼것만는식지, PHP는 처것니다합리을든모다음이표현으로 모든 합니다.{}하나의 "유효한" 표현으로.

문control 문)도입니다.foreach

당신이 할 수 있는 곳이 있지만, 절대 해서는 안 됩니다.

명시적인 것이 암시적인 것보다 항상 좋습니다.

언제 이전 코드로 돌아가서 수정해야 할지 누가 알겠어요.그런 것들을 놓치기는 너무 쉬운데 그렇게 해서 얻는 것은 아무것도 없습니다.

안에 논쟁이 하나만 있으면 잘 될 것입니다!그러나 곱슬머리를 생략하려면 콜론과 엔드를 사용할 수 있습니다.예:

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

앞서 말했듯이 당신은 속기에 대해 배우고 싶지 않고 받아들여진 대답은 생략에 대한 좋은 예를 제공합니다.curly braces하지만 추가할 것이 있습니다.보다시피 생략해도 좋습니다.curly bracesif ($x) echo 'foo';코드에는 아무런 문제가 없으며 성능이나 기타 문제가 없으며 다른 개발자가 읽을 수 있습니다.그리고 예는 또한 당신이 글을 쓴다면 그것을 보여줍니다.

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

대신에

if ($x)
    echo 'foo';

echo 'bar';

다음과 같은 경우 원치 않는 결과가 발생할 수 있습니다.bar인쇄를 원하지 않을 때 인쇄됩니다. 코드가 이러한 문으로 가득 찬 경우 자신의 코드를 읽기가 더 어려워지고 다른 사용자가 읽기가 더욱 어려워집니다.

저는 속기에 대해 배우고 싶지 않습니다. 저는 단지 언제 어디서 곱슬곱슬한 괄호를 생략하는 것이 가능한지에 대한 조건을 이해하고 싶습니다.

이러한 것들은 밀접하게 관련되어 있기 때문에 만약 여러분이 정말로 곱슬곱슬한 괄호를 생략하는 것이 가능한 곳을 이해하고 싶다면, 그것은 여러분이 이해하거나 적어도 속기를 알고 있는 필수 사항이어야 합니다.

  1. PHP 제어 구조
  2. 일반적으로 PHP 3차 조건 연산자 및 표현식

그래서 저의 큰 질문은 다음과 같습니다.곱슬곱슬한 중괄호는 언제 생략할 수 있으며 어떤 구조/루프/함수에서 생략할 수 있습니까?

그러나 많은 개발자들은 가독성과 유지보수를 위해 곱슬곱슬한 브레이스를 포함하지 않는 것이 나쁜 스타일이라고 생각할 것입니다.이전 두 링크는 곱슬곱슬한 대괄호를 생략할 수 있을 때 자신의 결정을 내리는 데 필요한 정보를 제공합니다.예를 들어, 모든 것이 정확히 동일한 작업을 수행하는 다음 코드 스니펫에는 아무런 문제가 없습니다.

곱슬곱슬한 브레이스로

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

와 같음

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

또는 점 연산자를 사용할 수 있습니다.

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

그리고 3항 조건 연산자를 사용할 수 있고 생략할 수도 있습니다.if곱슬곱슬한 교정기를 생략하는 것 외에 그 자체.

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

우리는 인쇄만 하기 때문에 그것을 줄이고 일부를 벗길 수 있습니다.print string functions개 괄호가 되었습니다.

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

php 7부터는 Null 병합 연산자를 사용할 수 있습니다.

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

정확히 같은 결과를 얻을 수 있는 방법은 여러 가지가 있음을 알 수 있습니다.그것은 이것에만 해당되는 것이 아닙니다.if예를 들 수 있지만 같은 것을 연습할 수 있습니다.structure/loop/function그래서 당신의 큰 질문에 대한 답은 아무도 없습니다.주로 다음을 고려해야 합니다.

  1. 작성 중인 코드를 유지 관리하기가 쉽습니까?
  2. 여러분은 스스로 대답할 수 있나요? 여러분이 곱슬곱슬한 교정기를 생략함으로써 얻는 것이 있습니다.

다음과 같은 간단한 용도로 사용할 수 있습니다.

if($a === true) continue;

그러나 일부 복잡한 하위 조건의 경우 문제가 발생할 수 있습니다.

    $a = false;
    $b = false;
    if ($a === true)
        if ($b === true)
            echo 1;
    else
        echo 2;

위의 코드를 사용하면 "2"가 출력으로 표시될 것으로 예상되지만 그렇지 않습니다.

저는 PHP 템플릿에서 곱슬곱슬한 중괄호를 생략합니다.예를 들어 다음과 같이 루프를 사용할 수 있습니다.

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

@Marko의 답변을 보완하기 위해, 이 문제에 대해 점 연산자를 사용할 때는 각 연산자를 괄호로 묶어야 합니다. 그렇지 않으면 순서가 뒤바뀌게 됩니다.

예를 들어, 아래 코드가 인쇄됩니다.PHP >= 7.0 required yours is 5.6.15.

(print "PHP >= 7.0 required yours is ") . (print phpversion()) . (print "\n");

인쇄되는 동안5.6.151PHP >= 7.0 required yours is 1.

print("PHP >= 7.0 required yours is ") . print(phpversion()) . print("\n");

은 또한 있다니습수도를 할 수 .and작동하기 위한 연산자.이와 같은 경우:

if (PHP_VERSION_ID < 70000)
    print("PHP >= 7.0 required yours is ") and
    print(phpversion()) and
    print("\n");

한 줄 문에 사용됩니다.

만약 당신이 하려고 했다면.

foreach($array as $x => $y)
    $do_something = $x;
    $do_something_else = $y;

내가 실수하지 않는 한, php 인터프리터는 각 문장 아래의 두 번째 줄을 암시적 중괄호 밖에 있는 것으로 간주할 것입니다.

나중에 이 코드를 다시 찾거나 다른 개발자가 당신의 작업을 본다면 들여쓰기 때문에 혼란스러울 것입니다.

따라서 일반적으로 이러한 문에는 항상 중괄호를 사용하는 것이 좋습니다.나중에 발생하는 두통/혼돈을 줄일 수 있습니다.

곱슬곱슬한 중괄호는 언제 생략할 수 있으며 어떤 구조/루프/함수에서 생략할 수 있습니까?저는 어떤 경우에도 분명히 그렇게 할 수 있다는 것을 알고 있습니다.하지만 당분간은, 각자를 위해서는?

If/else의 경우 다음 구성을 사용하여 중괄호를 사용하지 않고 단일 문과 여러 문을 가질 수 있습니다.

<?php
  if ($x):
    echo 'foo';
    echo 'bar';
  else:
    echo 'nofoo';
    echo 'nobar';
  endif;
?>

답변에 설명된 바와 같이

잠시 동안 및 각에 대해 괄호사용하지 않고 단일 문만 허용됩니다.

<?php
foreach($array as $x => $y)
    $do_something = $x;
?>

당신의 조항 뒤에 하나의 표현만 있을 때 가능합니다/

예를들면,

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

맞는 말이지만,

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

는 php php php php 할는터각니입것다생다인그리터프렇니라고 할 것입니다.if이 문이외 있니다습 밖에 .foreach

그 답은 쉽다.이는 C/C++에서도 동일합니다.

if, if/reading, if/reading if/else 및 loops => 다음 문이 한 줄이면 곱슬곱슬한 중괄호를 생략할 수 있습니다.

예:

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>";

PHP 속기 표현은 PHP 5.3부터 사용 가능했습니다.

$condition ? $value_if_true : $value_if_false

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

enter image description here

제 인생의 한 시점에서, 저는 또한 다음 문장에 한 줄만 있다면 곱슬곱슬한 교정기를 생략했습니다.

그때는 코드가 멋지고 매끈해 보여서 코드 줄을 최대한 아껴야겠다고 생각했습니다.

하지만 저는 명시적인 것이 장기적으로 특히 프로젝트의 유지관리 측면에서 더 도움이 된다는 것을 깨달았습니다.

또한, 우리는 절대로 마이크로 성능보다 중요한 것들을 희생해서는 안 됩니다.

코드 블록 내에서 단일 작업을 수행할 때 {}개의 곱슬곱슬한 대괄호를 생략해도 되지만, 해당 블록에서 두 개 이상의 작업을 실행하려면 해당 대괄호에 {}개의 곱슬곱슬한 대괄호를 사용해야 합니다. 그렇지 않으면 오류가 발생합니다.

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

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

값을 직접 반환하므로 단일 작업에서 {} 중괄호를 생략할 수 있습니다.

복합 동작에서는 다음 두 가지 작업을 수행하기 때문에 교정기를 설치해야 합니다.

  1. 부울 'true'를 $값에 할당합니다.
  2. 그 달러 가치를 반환합니다.

이게 말이 되기를 바랍니다.

언급URL : https://stackoverflow.com/questions/8726339/php-if-else-for-foreach-while-without-curly-braces

반응형