Operator trójargumentowy to if/else, który mieści się w jednym wyrażeniu: condition ? valueIfTrue : valueIfFalse. Zwraca jedną z dwóch wartości, więc możesz ją przypisać, wypisać przez echo albo przekazać do funkcji.
Zmień $age na 15, a $items na 3 i uruchom ponownie. Zwróć uwagę na nawiasy wokół operatora w ostatniej linii: bez nich . najpierw połączyłoby łańcuchy i wynik nie byłby tym, czego chcesz.
Operator trójargumentowy w szablonach HTML
Operator trójargumentowy to typowy sposób wyboru klasy CSS, etykiety albo atrybutu w szablonie. Ten blok czyta ?stock= z URL: uruchom go, potem kliknij linki na karcie Page, a ten sam skrypt wykona się ponownie z inną wartością.
<?= ... ?> to skrót od <?php echo ... ?>, dzięki czemu jednowierszowe warunki w znacznikach pozostają czytelne.
Skrócony zapis ?: (operator Elvis)
Pomiń środkową część, a dostaniesz $a ?: $b: zwraca $a, gdy $a jest prawdziwe, w przeciwnym razie $b. Przydaje się do wartości domyślnych, gdy pusty łańcuch albo 0 też mają prowadzić do wartości zastępczej.
Wartości fałszywe to false, 0, 0.0, "", "0", [] i null. Jeśli "0" jest w Twoich danych prawdziwą odpowiedzią (pole ilości, PIN), skrócony operator ją odrzuci.
?: vs ??
Wyglądają podobnie, ale sprawdzają co innego. ?: sięga po wartość zastępczą, gdy lewa strona jest fałszywa. ?? sięga po nią tylko wtedy, gdy lewa strona to null albo nie jest ustawiona, i nie ostrzega o brakującej zmiennej ani kluczu tablicy.
Używaj ?? dla „wartość może nie istnieć” (dane żądania, tablice konfiguracji, opcjonalne klucze). Używaj ?: dla „wartość istnieje, ale może być pusta”. Strona o operatorze null coalescing szczegółowo opisuje ?? i ??=.
Zagnieżdżony operator wymaga nawiasów
PHP 7 czytał a ? b : c ? d : e od lewej do prawej, inaczej niż prawie każdy inny język, i dawał złe wyniki. PHP 8 odmawia zgadywania:
<?php
echo $score > 90 ? "A" : $score > 80 ? "B" : "C";
PHP 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 /home/index.php on line 2
Dodaj nawiasy wokół wewnętrznego operatora, a zadziała:
Wyjątkiem jest skrócony zapis: $a ?: $b ?: $c jest dozwolony bez nawiasów, jak w przykładzie z operatorem Elvis powyżej.
match(true), gdy gałęzi jest więcej niż dwie
Zagnieżdżony operator trójargumentowy z trzema lub czterema poziomami trudno czytać nawet z nawiasami. match z true jako podmiotem sprawdza warunki od góry do dołu i zwraca pierwszą pasującą gałąź:
Zostaw operator trójargumentowy dla dwóch wyników w jednej linii, a po match albo łańcuch if/elseif sięgnij, gdy tylko potrzebujesz trzeciego.
Najczęściej zadawane pytania
Co to jest operator trójargumentowy w PHP?
Krótka forma if/else, która zwraca wartość: $label = $age >= 18 ? 'adult' : 'minor';. Jeśli warunek przed ? jest prawdziwy, używane jest wyrażenie po ?, w przeciwnym razie to po :.
Co oznacza ?: w PHP?
$a ?: $b to skrócony operator trójargumentowy (zwany też operatorem Elvis). Zwraca $a, jeśli $a jest prawdziwe, a w przeciwnym razie $b, więc '' ?: 'default' daje 'default'. To to samo co $a ? $a : $b, ale $a jest obliczane tylko raz.
Czy można zagnieżdżać operatory trójargumentowe w PHP?
Tylko z nawiasami. Od PHP 8 $a ? 'x' : $b ? 'y' : 'z' to błąd krytyczny, więc pisz $a ? 'x' : ($b ? 'y' : 'z'). Przy więcej niż dwóch gałęziach łatwiej czyta się match(true) albo łańcuch if/elseif.
Czy mogę użyć operatora trójargumentowego bez części else?
Nie, operator trójargumentowy zawsze wymaga obu gałęzi. Dla „użyj tej wartości albo zastępczej” napisz $x ?: 'default' lub $x ?? 'default'; aby coś zrobić tylko wtedy, gdy warunek jest spełniony, napisz zwykłe if albo $condition && doSomething();.