19-04-2023
Najłatwiej będzie nam w tym przypadku zacząć od przykładu 😉
<?php $a = true; $b = false; $variable1 = $a ? 'TAK' : 'NIE'; $variable2 = $b ? 'TAK' : 'NIE'; var_dump($variable1); // TAK var_dump($variable2); // NIE
W przypadku, gdy $a jest prawdą zostanie zwrócona wartość po znaku zapytania. W momencie, kiedy $a nie jest prawdą zostanie zwrócona wartość po dwukropku. Można to zobrazować za pomocą poniższego obrazku:
Łączenie operatorów
Możliwe jest łączenie operatorów warunkowych, jak na poniższym przykładzie, jednakże od wersji PHP 8.0 otrzymamy Fatal Error (jeszcze nie omawialiśmy błędów, więc tylko powiem w skrócie, że aplikacja się wywali). Od wersji PHP 7.4 dostaniemy komunikat, że ta możliwość jest DEPRECATED (czyli w skrócie mówiąc – należy szybko pozbyć się tego rozwiązania bo w wyższej wersji PHP użycie go będzie rzucało wyjątkiem – co też ma miejsce w PHP 8.0). Więc w skrócie ten akapit jest głównie po to, aby pisząc kod unikać takiego łączenia jak poniżej, bo jeśli o ile teraz aplikacja Ci się nie kładzie, to w przyszłości będzie 💩 Niektóre aplikacje jeszcze stoją na PHP 7.3 więc niestety takie rozwiązania jak poniżej też możesz spotkać na swojej drodze, więc warto wiedzieć, że coś takiego jest i lepiej unikać 😉
<?php var_dump(true ? 'true' : false ? 't' : 'f');
Wynik dla PHP 7.3.0
string(1) "t"
PHP 7.4
Deprecated: Unparenthesized `a ? b : c ? d : e` is deprecated. Use either `(a ? b : c) ? d : e` or `a ? b : (c ? d : e)` in code.php on line 2 string(1) "t"
PHP 8.0
Fatal error: Unparenthesized `a ? b : c ? d : e` is not supported. Use either `(a ? b : c) ? d : e` or `a ? b : (c ? d : e)` in code.php on line 2
Co w zamian?
Jeśli masz taką sytuację, to możesz ją rozwiązać na 2 sposoby pokazane poniżej:
<?php // Rozwiązanie 1 var_dump((true ? 'true' : false) ? 't' : 'f'); // Rozwiązanie 2 $result = true ? 'true' : false; var_dump($result ? 't' : 'f');
Inne użycia operatora
Jak wspomniałam w poprzednim artykule prawdą mogą być też inne wartości niż sam boolean TRUE. Co więcej może to być również wynik porównania! Dodatkowo możesz zwrócić nie tylko tekst, ale też takie dane jakie sobie zażyczysz. Spójrz na poniższe przykłady👇
<?php var_dump(6 > 5 ? 'TAK' : 'NIE'); // TAK var_dump(2 > 9 ? 'TAK' : 'NIE'); // NIE var_dump(6 == 5 ? 6 : 2); // 2 var_dump(5 ? 6 : 2); // 6 var_dump(0 ? 6 : 2); // 2 var_dump('Czy jestem prawdą?' ? 'TAK' : 'NIE'); // TAK var_dump('Czy jestem prawdą?' ? 55.777 : 123.55); // 55.777
Ćwiczenie
Napisz kod który, do zmiennej $variable przypisze wartość 7, jeśli $a > $b. W przeciwnym wypadku zostanie przypisana wartość 'NIE’; Użyj operatora warunkowego w tym celu. Wartości dla zmiennej $a i $b mogą być dowolne.
Dodatkowe materiały
- Ternary Operator – czyli operator warunkowy w oficjalnej dokumentacji PHP