문제

예시를 바탕으로 이 페이지에서, 아래에는 작동하는 코드 샘플과 작동하지 않는 코드 샘플이 있습니다.

다음을 사용하는 작업 코드 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 (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'];

그리고 이것은 "거리가 비어 있습니다!" 비어 있으면 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' : '').'.';

3 대 연산자는 속기와 IF/Else 블록입니다. 작업 코드에는 다른 조건이 없으므로 이에 적합하지 않습니다.

다음 예제가 작동합니다.

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

그것은 당신이 찾고있는 Ternary 운영자 일명 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/언어.operators.comparison.php

삼항 표현식을 "스택"하지 않는 것이 좋습니다.단일 진술 내에서 둘 이상의 3 원 운영자를 사용할 때의 PHP의 행동은 불쾌하지 않습니다.

조건부 환영 메시지

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

중첩 된 PHP 속도

echo 'Your score is:  '.($score > 10 ? ($age > 10 ? 'Average' : 'Exceptional') : ($age > 10 ? 'Horrible' : 'Average') );

교체하여 더 짧게 할 수 있습니다 echo ~와 함께 <?= code ?>

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

이것은 특히 방문한대로 메뉴 옵션을 표시 해야하는지 여부를 확인할 때 특히 유용합니다.

<li<?=($basename=='index.php' ? ' class="active"' : '')?>><a href="index.php">Home</a></li>

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

$value1 = '1';
$value2 = '2';
$value3 = '3';

// 1 Condition
$v1 = ($value1 == '1') ? TRUE : FALSE;
var_dump($v1);
echo "<br>";

// 2 Conditions
$v2 = ($value1 == '' ? TRUE : ($value2 == '2' ? TRUE : FALSE));
var_dump($v2);
echo "<br>";

// 3 Conditions
$v3 = ($value1 == '' ? TRUE : ($value2 == '' ? TRUE : ($value3 == '3' ? TRUE : FALSE)));
var_dump($v3);
echo "<br>";

// 4 Conditions
$v4 = ($value1 == '1') ? ($value2 == '2' ? ($value3 == '3' ? TRUE : 'FALSE V3') : 'FALSE V2') : 'FALSE V1' ;
var_dump($v4);
echo "<br>";

나는 당신이 괄호를 잘못 사용했다고 생각합니다. 이 시도:

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

작동해야한다고 생각합니다.

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

속기조차 연산자도 있습니다.

(expression1)? : expression2가 돌아옵니다 발현 1 그것이 true 또는 평가하는 경우 발현 2 그렇지 않으면.

예시:

$a = 'Apples';
echo ($a ?: 'Oranges') . ' are great!';

돌아올 것입니다

Apples are great!

PHP 5.3 이후, 3 원 운영자의 중간 부분을 제거 할 수 있습니다. Expr1이 true로 평가하고 그렇지 않으면 Expr3이 expr1을 반환하고 그렇지 않으면 expr3을 반환합니다.

로부터 PHP 매뉴얼

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top