Nice programing

PHP 삼항 연산자를 작성하는 방법

nicepro 2020. 12. 10. 21:09
반응형

PHP 삼항 연산자를 작성하는 방법


elseif 부분으로 PHP 삼항 연산자를 어떻게 작성합니까?

다음 ifelse같이 PHP 삼항 연산자 부분에 대한 기본 예제를 볼 수 있습니다 .

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

이와 같은 "elseif"부분을 삼항 연산자로 가져 오려면 어떻게해야합니까?

<?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';
  }
?>

Ternary는 당신이 원하는 것에 대한 좋은 해결책이 아닙니다. 코드에서 읽을 수 없으며 훨씬 더 나은 솔루션을 사용할 수 있습니다.

다음과 같이 배열 조회 "맵"또는 "사전"을 사용하지 않는 이유는 무엇입니까?

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

echo $vocations[$result->vocation];

이 응용 프로그램의 삼항은 다음과 같이 보입니다.

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

왜 이것이 나쁜가요? 왜냐하면-하나의 긴 줄로, 여기서 뭔가 잘못되면 유효한 디버깅 정보를 얻지 못할 것이기 때문에 길이가 읽기 어렵고 여러 삼진의 중첩이 이상하게 느껴집니다.

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

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

또는

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

삼항은 실제로 간단한 if else문장 을 작성하는 편리하고 짧은 방법 입니다. 위의 샘플 삼항은 다음과 같습니다.

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"; break;
        case 2: return 'Druid'; break;
        case 3: return 'Paladin'; break;
        case 4: return 'Knight'; break;
        case 5: return 'Master Sorcerer'; break;
        case 6: return 'Elder Druid'; break;
        case 7: return 'Royal Paladin'; break;
        default: return 'Elite Knight'; break;
    }
}

echo getVocationName($result->vocation);

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

;

좀 못 생겼어요. 정상적인 if진술을 고수해야 합니다.


기본 PHP 삼항 연산자를 작성하는 방법 :

($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 삼항 연산자 :

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

그러나 팔러 트릭을 제외하고 삼항 연산자를 중첩하지 마십시오. 나쁜 코드 냄새입니다.


솔직히 말해서 삼항 연산자는 이것을 더 악화시킬뿐입니다. 더 간단하게 만드는 것이 목표 인 경우 제가 제안하는 것은 다음과 같습니다.

$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]);

삼항 연산자를 사용하면

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

알 수 있듯이 더 많이 추가할수록 더 복잡해집니다.


삼항 if 문이 스위치 케이스와 함께 사용되기보다는 오히려 좋습니다. 예를 들면 :

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첫 번째 경우 진술을 찾고 있습니다. 두 번째는 그대로 괜찮지 만 일관성을 위해 변환 할 수 있습니다.

삼 항문은 부울 값과 대체 논리에 훨씬 더 적합합니다.


다른 모든 답변 외에도 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";

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

반응형