PHP 3진 연산자를 쓰는 방법
elseif 부분을 사용하여 PHP 3진 연산자를 작성하려면 어떻게 해야 합니까?
기본적인 예를 다음에 나타냅니다.if
★★★★★★★★★★★★★★★★★」else
PHP 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
'programing' 카테고리의 다른 글
Java의 여러 줄 툴팁? (0) | 2022.09.19 |
---|---|
pip 설치에서 "X용 빌딩 휠 실패"가 의미하는 바는 무엇입니까? (0) | 2022.09.19 |
문자열 경로를 통해 중첩된 JavaScript 개체 및 배열 액세스 (0) | 2022.09.19 |
utf8_general_ci와 utf8_unicode_ci의 차이점은 무엇입니까? (0) | 2022.09.19 |
기본 .equals 및 .hashCode는 내 클래스에서 어떻게 작동합니까? (0) | 2022.09.19 |