PHP 삼항 연산자를 작성하는 방법
elseif 부분으로 PHP 삼항 연산자를 어떻게 작성합니까?
다음 if
과 else
같이 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
'Nice programing' 카테고리의 다른 글
Java에서 상수 문자열 정의? (0) | 2020.12.10 |
---|---|
git status returns fatal : git 저장소가 아니지만 .git이 존재하고 HEAD에 적절한 권한이 있음 (0) | 2020.12.10 |
angularjs $ http.delete () 요청으로 데이터를 보내는 방법은 무엇입니까? (0) | 2020.12.10 |
태그를 한 커밋 앞으로 이동 (0) | 2020.12.10 |
Ruby에서 파일의 첫 줄 읽기 (0) | 2020.12.10 |