Menu

PHP Ternary Operatörü: ?: Kısa Yazım ve İç İçe Ternary

PHP ternary (üçlü) operatörü tek satırlık bir if/else'tir: $result = $condition ? 'yes' : 'no';. Kısa ternary ?: (Elvis operatörü), bunun ?? operatöründen farkı, iç içe ternary'lerin PHP 8'den beri neden parantez gerektirdiği ve match'in ne zaman daha temiz bir seçim olduğu.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

Ternary operatörü tek bir ifadeye sığan bir if/else'tir: condition ? valueIfTrue : valueIfFalse. İki değerden birini döndürür, bu yüzden onu atayabilir, echo ile yazdırabilir ya da bir fonksiyona geçirebilirsiniz.

$age değerini 15, $items değerini 3 yapıp tekrar çalıştırın. Son satırdaki ternary'nin etrafındaki parantezlere dikkat edin: onlar olmasaydı . önce stringleri birleştirirdi ve sonuç istediğiniz gibi olmazdı.

HTML şablonlarında ternary

Ternary, bir şablonun içinde bir CSS sınıfı, bir etiket veya bir öznitelik seçmenin olağan yoludur. Bu blok URL'deki ?stock= değerini okur: çalıştırın, sonra Page sekmesindeki bağlantılara tıklayın; aynı betik farklı bir değerle yeniden çalışır.

<?= ... ?>, <?php echo ... ?> ifadesinin kısaltmasıdır ve işaretlemenin içindeki tek satırlık koşulları okunur tutar.

Kısa ternary ?: (Elvis operatörü)

Ortadaki kısmı çıkarırsanız $a ?: $b elde edersiniz: $a truthy olduğunda $a, değilse $b döndürür. Boş bir string veya 0 da varsayılana dönmeliyse varsayılan değerler için kullanışlıdır.

Falsy değerler şunlardır: false, 0, 0.0, "", "0", [] ve null. Verinizde "0" gerçek bir yanıtsa (bir miktar alanı, bir PIN), kısa ternary onu atar.

?: ile ??

Birbirlerine benzerler ama farklı şeyleri kontrol ederler. ?: sol taraf falsy olduğunda varsayılana döner. ?? ise yalnızca sol taraf null veya atanmamış olduğunda varsayılana döner ve eksik bir değişken veya dizi anahtarı için uyarı vermez.

"Değer var olmayabilir" durumları için (istek verileri, yapılandırma dizileri, isteğe bağlı anahtarlar) ?? kullanın. "Değer var ama boş olabilir" durumu için ?: kullanın. Null birleştirme operatörü sayfası ?? ve ??= operatörlerini ayrıntılı olarak anlatır.

İç içe ternary parantez gerektirir

PHP 7, a ? b : c ? d : e ifadesini neredeyse diğer tüm dillerin aksine soldan sağa okuyordu ve yanlış sonuçlar üretiyordu. PHP 8 tahmin yürütmeyi reddeder:

<?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

İçteki ternary'nin etrafına parantez ekleyin, çalışır:

İstisna kısa ternary'dir: yukarıdaki Elvis örneğinde olduğu gibi $a ?: $b ?: $c parantezsiz yazılabilir.

İkiden fazla dal olduğunda match(true) kullanın

Üç veya dört seviyeli iç içe bir ternary, parantezle bile zor okunur. Konusu true olan match koşulları yukarıdan aşağıya kontrol eder ve eşleşen ilk kolu döndürür:

Ternary'yi tek satırdaki iki sonuç için kullanın; üçüncüsüne ihtiyaç duyduğunuz anda match ya da bir if/elseif zincirine geçin.

Sıkça Sorulan Sorular

PHP'de ternary operatörü nedir?

Bir değer döndüren kısa bir if/else biçimidir: $label = $age >= 18 ? 'adult' : 'minor';. ? işaretinden önceki koşul true ise ? işaretinden sonraki ifade, değilse : işaretinden sonraki ifade kullanılır.

PHP'de ?: ne anlama gelir?

$a ?: $b kısa ternary'dir (Elvis operatörü de denir). $a truthy ise $a, değilse $b döndürür, bu yüzden '' ?: 'default' sonucu 'default' olur. $a ? $a : $b ile aynıdır, ama $a yalnızca bir kez değerlendirilir.

PHP'de ternary operatörleri iç içe kullanılabilir mi?

Yalnızca parantezle. PHP 8'den beri $a ? 'x' : $b ? 'y' : 'z' ölümcül bir hatadır, bu yüzden $a ? 'x' : ($b ? 'y' : 'z') yazın. İkiden fazla dal için match(true) ya da bir if/elseif zinciri daha kolay okunur.

Ternary'yi else kısmı olmadan kullanabilir miyim?

Hayır, ternary her zaman iki dalı da ister. "Bu değeri kullan ya da varsayılana dön" için $x ?: 'default' veya $x ?? 'default' yazın; yalnızca bir koşul sağlandığında bir şey yapmak için normal bir if ya da $condition && doSomething(); yazın.

Coddy programlama dilleri çizimi

Coddy ile kodlamayı öğren

BAŞLA