Kurs PHP – Operator warunkowy

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:

Operator warunkowy

Łą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

  1. Ternary Operator – czyli operator warunkowy w oficjalnej dokumentacji PHP

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.