Trójskładnik nie jest dobrym rozwiązaniem, jeśli chcesz. Nie będzie czytelny w twoim kodzie, a dostępnych jest znacznie lepszych rozwiązań.
Dlaczego nie skorzystać z odnośnika tablicy „Mapa” lub „słownik”, tak:
$vocations = array(
1 => "Sorcerer",
2 => "Druid",
3 => "Paladin",
...
);
echo $vocations[$result->vocation];
potrójnego dla tego zastosowania w końcu wygląda tak:
echo($result->group_id == 1 ? "Player" : ($result->group_id == 2 ? "Gamemaster" : ($result->group_id == 3 ? "God" : "unknown")));
Dlaczego to zły? Ponieważ - jako pojedyncza długa linia nie otrzymalibyśmy poprawnych informacji do debugowania, gdyby coś tu poszło nie tak, długość utrudnia odczytanie, a zagnieżdżanie wielu ternariów wydaje się dziwne.
Standardowy Ternary jest proste, łatwe do odczytania i będzie wyglądać następująco:
$value = ($condition) ? 'Truthy Value' : 'Falsey Value';
lub
echo ($some_condition) ? 'The condition is true!' : 'The condition is false.';
potrójny jest naprawdę wygodne/krótsza droga napisać proste oświadczenie if else
. Powyższa próba trójargumentowy jest taka sama jak:
if ($some_condition) {
echo 'The condition is true!';
} else {
echo 'The condition is false!';
}
Jednak trójargumentowy dla złożonej logiki szybko staje się nieczytelny i nie jest już wart zwięzłość.
echo($result->group_id == 1 ? "Player" : ($result->group_id == 2 ? "Gamemaster" : ($result->group_id == 3 ? "God" : "unknown")));
Nawet niektóre uprzejmy formatowanie szerzyć ją na wielu liniach, to nie jest bardzo jasne:
echo($result->group_id == 1
? "Player"
: ($result->group_id == 2
? "Gamemaster"
: ($result->group_id == 3
? "God"
: "unknown")));
Lepiej byłoby użyć przełącznika, a nawet lepiej, mapy wyszukiwania tablicy. Ternary z definicji to if-then-else. Napisanie trójskładnikowego, aby spróbować zrobić to, co chcesz, byłoby bardzo trudne do odczytania/naśladowania. –
@ cale_b Czy możesz to trochę wyjaśnić? Nadal uczę się PHP i w mojej pracy użyłem tylko instrukcji if-elseif-else, więc nie jestem zaznajomiony z tymi wszystkimi rzeczami. – dinomuharemagic
Podałem przykład poniżej. Jeśli nie zamierzasz korzystać z bazy danych, to rozwiązanie jest czyste i łatwe do zrozumienia. –