[php] PHP에서 “if / else”의 약어로 삼항 연산자 (? :)를 어떻게 사용합니까?

이 페이지 의 예제 기반으로 아래에 작동하는 코드와 작동하지 않는 코드 샘플이 있습니다.

if문을 사용하는 작업 코드 :

if (!empty($address['street2'])) echo $address['street2'].'<br />';

삼항 연산자를 사용하는 작동하지 않는 코드 :

$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';

// Also tested this
(empty($address['street2'])) ? 'Yes <br />' : 'No <br />';

업데이트
브라이언의 팁 후, 나는 에코 $test가 예상 된 결과를 출력 한다는 것을 발견했습니다 . 다음은 매력처럼 작동합니다!

echo (empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />';



답변

그만큼

(condition) ? /* value to return if condition is true */
            : /* value to return if condition is false */ ;

구문은 ?다음과 같은 방식으로 코드를 실행할 수 없기 때문에 “약식 if”연산자 ( 조건부 연산자라고 함)가 아닙니다.

if (condition) {
    /* condition is true, do something like echo */
}
else {
    /* condition is false, do something else */
}

귀하의 예에서는이 비어 있지 않을 echo때 문을 실행하고 $address있습니다. 조건부 연산자와 같은 방식으로이 작업을 수행 할 수 없습니다. 그러나 수행 할 수있는 작업 echo은 조건부 연산자의 결과입니다.

echo empty($address['street2']) ? "Street2 is empty!" : $address['street2'];

그러면 “Street is empty!”가 표시됩니다. 비어 있으면 street2 주소를 표시합니다.


답변

PHP 7 이상

PHP 7 부터이 작업은 다음 과 같이 Null 병합 연산자를 사용하여 간단히 수행 할 수 있습니다 .

echo !empty($address['street2']) ?? 'Empty';


답변

기본 참 / 거짓 선언

$is_admin = ($user['permissions'] == 'admin' ? true : false);

조건부 환영 메시지

echo 'Welcome '.($user['is_logged_in'] ? $user['first_name'] : 'Guest').'!';

조건부 항목 메시지

echo 'Your cart contains '.$num_items.' item'.($num_items != 1 ? 's' : '').'.';

참조 : https://davidwalsh.name/php-ternary-examples


답변

삼항 연산자는 if / else 블록의 약어입니다. 작업 코드에는 else 조건이 없으므로 이에 적합하지 않습니다.

다음 예제가 작동합니다.

echo empty($address['street2']) ? 'empty' : 'not empty';


답변

당신이 찾고있는 삼항 연산자 일명 Elvis 연산자 (google it : P)입니다.

echo $address['street2'] ?: 'Empty'; 

변수 값을 반환하거나 변수가 비어 있으면 기본값을 반환합니다.


답변

참고 중첩 된 조건 연산자를 사용하는 경우, 당신은 괄호를 사용할 수 있습니다 가능한 문제를 피하기 위해!

PHP가 최소한 Javascript 또는 C #과 동일한 방식으로 작동하지 않는 것 같습니다.

$score = 15;
$age = 5;

// The following will return "Exceptional"
echo 'Your score is: ' . ($score > 10 ? ($age > 10 ? 'Average' : 'Exceptional') : ($age > 10 ? 'Horrible' : 'Average'));

// The following will return "Horrible"
echo 'Your score is: ' . ($score > 10 ? $age > 10 ? 'Average' : 'Exceptional' : $age > 10 ? 'Horrible' : 'Average');

Javascript와 C #의 동일한 코드는 두 경우 모두 “Exceptional”을 반환합니다.

두 번째 경우, PHP가하는 일은 (또는 적어도 내가 이해하는 것입니다) :

  1. 이다 $score > 10? 예
  2. 이다 $age > 10? 아니요, 따라서 현재 $age > 10 ? 'Average' : 'Exceptional'는 ‘예외’를 ​​반환합니다.
  3. 그런 다음 전체 문을 중지하고 ‘Exceptional’을 반환하는 대신 다음 문을 계속 평가합니다.
  4. 다음 문장은 'Exceptional' ? 'Horrible' : 'Average'‘Exceptional’이 진실이므로 ‘Horrible’을 반환합니다.

문서에서 : http://php.net/manual/en/language.operators.comparison.php

삼항 표현식을 “스택”하지 않는 것이 좋습니다. 단일 명령문 내에서 둘 이상의 삼항 연산자를 사용할 때 PHP의 동작은 명확하지 않습니다.


답변

빠르고 짧은 방법 :

echo $address['street2'] ? : "No";

다음은 하나 이상의 다양한 조건이있는 몇 가지 흥미로운 예입니다.

$color = "blue";

// Condition #1 Show color without specifying variable 
echo $color ? : "Undefined";
echo "<br>";

// Condition #2
echo $color ? $color : "Undefined";
echo "<br>";

// Condition #3
echo ($color) ? $color : "Undefined";
echo "<br>";

// Condition #4
echo ($color == "blue") ? $color : "Undefined";
echo "<br>";

// Condition #5
echo ($color == "" ? $color : ($color == "blue" ? $color : "Undefined"));
echo "<br>";

// Condition #6
echo ($color == "blue" ? $color : ($color == "" ? $color : ($color == "" ? $color : "Undefined")));
echo "<br>";

// Condition #7
echo ($color != "") ? ($color != "" ? ($color == "blue" ? $color : "Undefined") : "Undefined") : "Undefined";
echo "<br>";