Php Ternary

php

Merhaba ben Akif Biçek sizlerle birlikte php de sıfırdan ileri düzey makelelerimizin onüçüncüsüne başlamış bulunuyoruz. Bir önceki php switch case makalemizi okuduysanız sizlerle birlikte php ternary yazımız ile başlıyoruz.

Php Ternary Operatörü

Php ternary operatörü if else yapısının kısa kulanımıdır diyebiliriz türkçe olarak çevriside üçlü operatör manasındadır. Çünkü sadece üç operatör ile if else deyimini içine alıyor.

Üç operatörümüzü kısaca sıralarsak;

  1. “()” Koşul yada koşulların belirtildiği parantez.
  2. “?” İfadenin true olduğunda alacağı değer yada işlenecek kod.
  3. “:” İfade false olduğunda alacağı değer yada işlenecek kod.
Yapısı :
	(Koşul veya Koşullar) ? Geçerli ifade : Geçersiz ifade ;

Parantezler arasına koşul yazılır koşul true çıkarsa “?” soru işaretinden sonraki ifade çalışır eğer koşul false çıkarsa “:” iki nokta dan sonraki ifade çalışır.

Php ternary operatörü genel olarak bir değişkenin koşullar vasıtasıyla değerini belitmek için kullanılsa bile bu onun sadece bu şekilde kullanılması anlamına gelmiyor direkt olarak bir if else yapısı gibi çalıştırabiliriz. İstersek tekil if yapısınıda kullanabiliriz hatta if elseif else yapısındada kullanabiliriz fakat bu çok karmaşık olur bu yüzden tavsiye etmem onun için switch case vardır fakat biz bu makalemizde buna değineceğiz.

<?php
$site = "teknopati.net";
$siteIki = "google.com";
if($site == $siteIki){
    echo "Girilen İki Sitede Aynı.";
}else{
    echo "Girilen İki Sitede Farklı.";
}
Girilen İki Sitede Farklı.

İf else yapısını anlatırken şöyle bir örnek kullanmıştık bunu ternary operatörleri ile kullanalım.

<?php
$site = "teknopati.net";
$siteIki = "google.com";
echo ($site == $siteIki) ? "Girilen İki Sitede Aynı." : "Girilen İki Sitede Farklı.";
Girilen İki Sitede Farklı.

İf else yapısındaki beş satırlık işlem burda sadece tek satırda halledilmiştir. Önerim eğer bu tarz if else yapısı kuracağınıza ternary kullanmanız daha iyidir zira kodun kısalığı önemlidir. Tabi burda küçük bir incelik daha var if else yapısındaki echo komutu tekrarı burda sadece bir kez kullanılmıştır buda bir artı değer buna yazımızın ilerleyen kısmında detaylı olarak değineceğiz.

<?php
$girisyapildimi = true;
if($girisyapildimi == true){
   $buttonyazisi = "Sepetim";
}else{
   $buttonyazisi = "Kayıt Ol";
}
echo "<button>".$buttonyazisi."</button>";
Php Ternary
Php Ternary

Kullanıcının oturmuna göre herhangi bir buttona üzerine bir yazı yazdırmak istiyoruz ve buttonun yazısını bir değişkende depolamak istiyoruz. Eğer kullanıcı giriş yapmış ise “$buttonyazisi” değişkenimize “Sepetim” yazısı depolanacak şayet giriş yok ise “$buttonyazisi” değişkenimize “Kayıt Ol” yazısı depolanacak. Bunu ternary operatörümüz ile yazalım.

<?php
$girisyapildimi = true;
$buttonyazisi = ($girisyapildimi == true) ? "Sepetim" : "Kayıt Ol";
echo "<button>".$buttonyazisi."</button>";
Php Ternary
Php Ternary

Burdaki fark sonuç çıktılarının değişkene depolanması olayı.

Burada önemli bi husus vardır ternaryde, yazdırmak yada benzer bir işlem veya değişkene koşullara bağlı olarak değer atanması işlemlerinde bu işlemler sadece bir kez ve ternary den önce yazılır. Böylelikle if else yapısındaki tekrardan kurtuluruz.

Yukarıda değer yada işlencek kod diye yazdık ama örneklerde sadece string veri türlerinde değer atanması yada yazdırılması geçiyor diyebilirsiniz. Bunu anlatmak için bir kaç örnek yapacağız fakat ilkin soru ve iki nokta operatörlerinden sonra echo ve değer ataması örneklerimize bakalım.

<?php
$site = "teknopati.net";
$siteIki = "google.com";
($site == $siteIki) ? echo "Girilen İki Sitede Aynı." : echo "Girilen İki Sitede Farklı.";
Php Ternary
Php Ternary

Bu örneği yazmaya başladığınızde eğer bir ide kullanıyorsanız size hata olarak altını çizecektir.

<?php
$girisyapildimi = true;
($girisyapildimi == true) ? $buttonyazisi =  "Sepetim" : $buttonyazisi = "Kayıt Ol";
echo "<button>".$buttonyazisi."</button>";
Php Ternary
Php Ternary

Fakat bu kodu çalıştırdığınızda başarılı bir şekilde çalıştığını göreceksiniz. Yani burdan echo gibi komutları ternaryde true yada false işleclerinin ardına yazamıyoruz ama oralara sadece bir değer verilmedipini orda kodlarında çalıştığını görüyoruz.

<?php
$sayi = 15;
if($sayi < 20){
   $sayi++;
}else{
   $sayi = 0;
}
echo $sayi;
16

Bu örneğimizde belirlediğimiz sayının 20 den küçük olması dahilinde sayının değerini bir artırmak eğer belirlediğimiz değer 20 den büyük ise bu sayı sıfırlanacak. Bunu ternary koşulu ile yaparsak;

<?php
$sayi = 15;
($sayi < 20) ? $sayi++ : $sayi = 0;
echo $sayi;
16

Görüldüğü gibi sadece değer almıyor ayrıca kodlarıda işliyor. Burda dikkat edilmesi gereken birden fazla kod ifadesi bulunduğunda yani yukarıdaki örneğimizden hareketle biz sayı 20 den küçük ise bu sayıyı bir kez artıralım artırdıktan sonra bir kezde azaltalım hatta bir kezde 15 sayısını çıkaralım gibi bir ardı ardına işlem yapmak istersek. Yani şunun gibi;

<?php
$sayi = 15;
if($sayi < 20){
   $sayi++;
   $sayi--;
   $sayi = $sayi - 15;
}else{
   $sayi--;
}
echo $sayi;
0

True bloğunda görüldüğü gibi her işlem bir satırda ve hepsinin sonunda bir noktalı virgül var ternary ilemi zaten tek satırlık ve sonunda sadece bir kez noktalı virgül alıyor bu ternary yapısına aykırı bir durum zaten çalışmaz.

<?php
$sayi = 15;
($sayi<20) ? $sayi++;$sayi--;$sayi = $sayi - 15; :  $sayi--;
echo $sayi;
Php Ternary
Php Ternary

Bahsetdiğim durum birebir yukardaki ile aynı yani siz böyle yaparsanız size php hata verdirecektir peki bu durumu aşmanın bir yolu yokmu tabikide var birleştirme operatörünü kullanarak bu işlemi gerçekleştirebilrsiniz.

<?php
$sayi = 15;
($sayi<20) ? $sayi++.$sayi--.$sayi = $sayi - 15 :  $sayi--;
echo $sayi;
0

Peki ya tekil if koşulu gibi kullanmak istersek nasıl yapabiliriz cevabımız çok basit iki noktanın hemen ardına (“”) iki tane peş peşe tırnak işareti koymak yani binevi boş bırakmak.

<?php
$site = "teknopati.net";
$siteIki = "teknopati.net";
if($site == $siteIki){
    echo "Girilen İki Sitede Aynı.";
}
Girilen İki Sitede Aynı.

Şöyle bir örneği ternaryde kullanmak isterseniz aşağıdaki gibi yapın.

<?php
$site = "teknopati.net";
$siteIki = "teknopati.net";
echo ($site == $siteIki) ? "Girilen İki Sitede Aynı.":"";
Girilen İki Sitede Aynı.

Çalıştğını göreceksiniz peki ya değer yerine işlem kullanmak istersek ?

<?php
$sayi = 1999;
if($sayi < 2000){
   $sayi++;
}
echo $sayi;
2000

Sayımızın değeri 2000 den küçük ise onu bir arttır.

<?php
$sayi = 1999;
($sayi < 2000) ? $sayi++ : "";
echo $sayi;
2000

Gördüğünüz gibi boş bıraktığınızda sanki tekil bir if bloğu gibi çalışıyor.

Şimdide yukarıda bahsettiğimiz gibi if elseif else yapısı gibi kullanalım. Fakat bu kullanım pek önerilmez zira çok karmaşık oluyor. küçük bir else if örneğinde gösterelim.

<?php
$sayi = 30;
if($sayi < 30){
    echo "Sayı 30 dan küçük";
}elseif($sayi == 30){
    echo "Sayı 30 a eşit";
}else{
    echo "Sayı 30 dan büyük";
}
Sayı 30 a eşit

Bu basit örneğimizi ternary öperatörü kullanarak yazalım.

<?php 
$sayi = 30;
echo ($sayi < 30)? "Sayı 30 dan küçük":(($sayi == 30)? "Sayı 30 a eşit":"Sayı 30 dan büyük")
Sayı 30 a eşit

İç içe bir yapı gibi iki noktadan sonra yani false kısmına parantez içinde ikinci ternary ifadesi geliyor bu bizim ikinci koşulumuz oluyor burda dikkat edilmesi gereken eğer iki yada daha fazla koşul yazılacaksa bunları özenle parantez içine almamız gerekmektedir. Ayrıca en sondaki else ternary de her zaman son koşuldan sonraki iki nokta dan sonra olur. Yapısından bahsetmek gerekirse;

(1.KOŞUL) ? 1.TRUEALANI : ((2.KOŞUL) ? 2.TRUEALANI : ELSEALANI)

Biraz daha koşullar fazlalaşınca parantezlerde fazlalaşacak ve karışacak.

(1.KOŞUL) ? 1.TRUEALANI : ((2.KOŞUL) ? 2.TRUEALANI : ((3.KOŞUL) ? 3.TRUEALANI: ELSEALANI))
<?php
$yas = 50;
if($yas <= 20){
   echo "Çok Gençsiniz.";
}elseif($yas <=  30){
   echo "Hala Genç Sayılırsınız.";
}elseif($yas <= 40){
   echo "Yaşlılığa Az Kaldı.";
}elseif($yas <= 50){
   echo "Yaşlı Sayılırsınız.";
}elseif($yas <= 60){
   echo "Yaşlısınız.";
}elseif($yas > 60){
   echo "Çok Yaşlısınız.";
}
Yaşlı Sayılırsınız.

Bu örneğimizi ternary de yapalım

<?php
$yas = 50;
echo ($yas <= 20) ?  "Çok Gençsiniz" : (($yas <=  30) ?  "Hala Genç Sayılırsınız." : 
        (($yas <= 40) ? "Yaşlılığa Az Kaldı." : 
            (($yas <= 50) ?  "Yaşlı Sayılırsınız." :
                (($yas <= 60) ?  "Yaşlısınız." : 
                    (($yas > 60) ? "Çok Yaşlısınız." :
                        "Girdiğiniz Değer Bir Sayı Değildir"))))
                        );
Yaşlı Sayılırsınız.

Gördüğünüz gibi karmakarışık bir yapısı var kullanmak isterseniz kullanabilirsiniz. Ben switch-case tercih ederim.

Php ternary yazımızı burada sonlandırıyoruz.

Php ternary hakkında daha fazla bilgi için php ‘nin sitesini ziyaret edin. Veya w3schools ‘ un sitesini ziyaret edin ve PHP Conditional Assignment Operators başlığının altına göz atın .

Bir sonraki php null operatörü makalemizde görüşmek dileğiyle.

E-bültene Abone Ol Merak etmeyin. Spam yapmayacağız.

Yazar

İşim Yok Hobilerim Var

İlgili Yazılar

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Hızlı yorum için giriş yapın.

Başka Yazı Yok

Kayıt Ol

Zaten üye misiniz? Giriş Yap

Giriş Yap

Henüz üyeliğiniz yok mu? Kayıt Ol