programing

PHP 3진 연산자를 쓰는 방법

sourcetip 2022. 9. 19. 22:27
반응형

PHP 3진 연산자를 쓰는 방법

elseif 부분을 사용하여 PHP 3진 연산자를 작성하려면 어떻게 해야 합니까?

기본적인 예를 다음에 나타냅니다.if ★★★★★★★★★★★★★★★★★」elsePHP 3을 사용하다

echo (true)  ? "yes" : "no";    //prints yes
echo (false) ? "yes" : "no";    //prints no

이렇게 "elseif" 부분을 3진 연산자에 삽입하려면 어떻게 해야 하나요?

<?php 
  if($result->vocation == 1){
    echo "Sorcerer"; 
  }else if($result->vocation == 2){
    echo 'Druid';
  }else if($result->vocation == 3){
    echo 'Paladin';
  }else if($result->vocation == 4){
    echo 'Knight';
  }else if($result->vocation == 5){
    echo 'Master Sorcerer';
  }else if($result->vocation == 6){
    echo 'Elder Druid';
  }else if($result->vocation == 7){
    echo 'Royal Paladin';
  }else{
    echo 'Elite Knight';
  }
?>

삼항문은 당신이 원하는 것을 위한 좋은 해결책이 아니다.당신의 코드로 읽을 수 없을 뿐만 아니라 훨씬 더 나은 해결책이 있습니다.

다음과 같이 어레이 룩업 "map" 또는 "dictionary"를 사용하면 됩니다.

$vocations = array(
    1 => "Sorcerer",
    2 => "Druid",
    3 => "Paladin",
    ...
);

echo $vocations[$result->vocation];

이 어플리케이션의 3단계는 다음과 같습니다.

echo($result->group_id == 1 ? "Player" : ($result->group_id == 2 ? "Gamemaster" : ($result->group_id == 3 ? "God" : "unknown")));

왜 안 좋은 거죠?왜냐하면 - 여기서 문제가 발생해도 유효한 디버깅 정보를 얻을 수 없기 때문입니다.길이 때문에 읽기 어렵고 여러 개의 3진수가 중첩되어 있기 때문입니다.

Standard Ternary는 단순하고 읽기 쉬우며 다음과 같습니다.

$value = ($condition) ? 'Truthy Value' : 'Falsey Value';

또는

echo ($some_condition) ? 'The condition is true!' : 'The condition is false.';

3진법, 즉 3진법이나 3진법이나 3진법이나 3진법이나 3진법이나 3진법이나 3진법이나 3진법이나 3진법이나 3진법이나 3진법이나 3진법이나 3진법이나 3진법이나 3진법이나 3진법이나 3진법이나 3진법이나 3진법,if else 는 다음과 3시라고 합니다.

if ($some_condition) {
    echo 'The condition is true!';
} else {
    echo 'The condition is false!';
}

그러나 복잡한 논리의 삼원칙은 금방 읽을 수 없게 되어 더 이상 간결하게 할 가치가 없다.

echo($result->group_id == 1 ? "Player" : ($result->group_id == 2 ? "Gamemaster" : ($result->group_id == 3 ? "God" : "unknown")));

여러 줄에 걸쳐서 포맷을 해도 명확하지 않습니다.

echo($result->group_id == 1 
    ? "Player" 
    : ($result->group_id == 2 
        ? "Gamemaster" 
        : ($result->group_id == 3 
            ? "God" 
            : "unknown")));

이것은 일반적인 작업이기 때문에, 스위치/케이스를 함수 호출로 감싸는 것을 추천합니다.

function getVocationName($vocation){
    switch($vocation){
        case 1: return "Sorcerer";
        case 2: return 'Druid';
        case 3: return 'Paladin';
        case 4: return 'Knight';
        case 5: return 'Master Sorcerer';
        case 6: return 'Elder Druid';
        case 7: return 'Royal Paladin';
        default: return 'Elite Knight';
    }
}

echo getVocationName($result->vocation);
echo ($result ->vocation == 1) ? 'Sorcerer'
        : ($result->vocation == 2) ? 'Druid'
           :  ($result->vocation == 3) ? 'Paladin'
                    ....

;

좀 못생겼어.넌 평범하게 살아야 해if★★★★★★★★★★★★★★★★★★.

기본 PHP Ternary 연산자를 쓰는 방법:

($your_boolean) ? 'This is returned if true' : 'This is returned if false';

예:

$myboolean = true;
echo ($myboolean) ? 'foobar' : "penguin";
foobar

echo (!$myboolean) ? 'foobar' : "penguin";
penguin

'elseif'가 포함된 PHP 3진 연산자가 여기에 주입되었습니다.

$chow = 3;
echo ($chow == 1) ? "one" : ($chow == 2) ? "two" : "three";
three

하지만 3진수 연산자는 속임수만 빼놓지 마세요.나쁜 코드 냄새야

3차원적인 if-statement가 스위치 케이스에 들어가는 것보다는 낫겠어요.예를 들어 다음과 같습니다.

switch($result->vocation){
case 1:
    echo "Sorcerer";
    break;
case 2:
    echo "Druid";
    break;
case 3:
    echo "Paladin";
    break;
case 4:
    echo "Knight";
    break;
case 5:
    echo "Master Sorcerer";
    break;
case 6:
    echo "Elder Druid";
    break;
case 7:
    echo "Royal Paladin";
    break;
default:
    echo "Elite Knight";
    break;
}

그럴 리 없어. 지저분하고 읽기 어려워.

있는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.switch첫 번째 케이스의 진술. 일관성을 할 수 .

3진법은 부울값과 교대논리에 훨씬 적합합니다.

솔직히 3진 연산자는 이 상황을 악화시킬 뿐입니다.간단하게 하는 것이 목적이라면 다음과 같습니다.

$groups = array(1=>"Player", 2=>"Gamemaster", 3=>"God");
echo($groups[$result->group_id]);

그리고 당신의 천직에도 비슷한 것이 있습니다.

$vocations = array(
  1=>"Sorcerer",
  2=>"Druid",
  3=>"Paladin",
  4=>"Knight",
  ....
);
echo($vocations[$result->vocation]);

3진 연산자를 사용한다면, 결국엔

echo($result->group_id == 1 ? "Player" : ($result->group_id == 2 ? "Gamemaster" : ($result->group_id == 3 ? "God" : "unknown")));

네가 알 수 있듯이, 더 많이 추가할수록 더 복잡해질 뿐이야.

다른 모든 답변과 더불어switch근데 좀 긴 것 같아요.

switch ($result->vocation) {
case 1:
    echo 'Sorcerer';
    break;

case 2:
    echo 'Druid';
    break;

case 3:
    echo 'Paladin';
    break;

case 4:
    echo 'Knight';
    break;

case 5:
    echo 'Master Sorcerer';
    break;

case 6:
    echo 'Elder Druid';
    break;

case 7:
    echo 'Royal Paladin';
    break;

default:
    echo 'Elite Knight';
    break;
}

다음 작업도 가능합니다.

echo "yes" ?: "no" // Assuming that yes is a variable that can be false.

대신:

echo (true)  ? "yes" : "no";

PHP 8(좌측 관련 3진 연산자 변경)

왼쪽 관련 삼원 연산자 권장 해제 https://wiki.php.net/rfc/ternary_associativity.이 3진 연산자는 PHP에 이상한 기호가 있습니다.이 RFC에서는 네스트된 3진문에 대한 권장 해제 경고가 추가되어 있습니다.PHP 8에서는 이 권장 해제가 컴파일 시간 오류로 변환됩니다.

1 ? 2 : 3 ? 4 : 5;   // deprecated
(1 ? 2 : 3) ? 4 : 5; // ok

출처 : https://stitcher.io/blog/new-in-php-74#numeric-literal-separator-rfc

언급URL : https://stackoverflow.com/questions/17981723/how-to-write-a-php-ternary-operator

반응형