folder Tahribat.com Forumları
linefolder Asp - Php - Cgi - Perl
linefolder Php İf/Else Ve Switch/Case Kullanımı -- Farklı Döküman



Php İf/Else Ve Switch/Case Kullanımı -- Farklı Döküman

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Ayro
    Ayro's avatar
    Kayıt Tarihi: 08/Ağustos/2005
    Erkek

    Bir çoğunuz if/else ve switch/case kullanmayı biliyordur.Ben bilenlerede, bilmeyenlerede bazı inceliklerini anlatmak istedim.Örneğin if/else te süslü parantezleri ({}) kullanmaya bilirsiniz !! 

    Madem kullanmayabiliriz neden öyle yazıyorlar ?
    Çünkü bazı durumlarda kullanmayabiliriz.Örneğin bir değişkenimiz var ve tek mi çift mi diye yazdıracağız.İşte burada tek ifade için kullanmamıza gerek yok.

    İfade (statement) nedir ? 
    echo 'bu bir ifadedir';

    Php yada c tabanlı dillerde ifade sonuna ; koyarız.O ifade biter.
    echo 'ayrox';exit;

    yukarıda iki ifademiz var.Bir tanesi echo, diğeri exit.Sonlarına ; koyduk.Her ifadeden sonra noktalı virgül (;) koyuyoruz.İf ve else lerden sonra süslü parantez kullanmazsak ilk ifade işleme konur.Hemen örnek yapalım;

    <?php
    $s=30;
    if($s % 2 == 0)
    echo $s.' sayısı çifttir';
    else
    echo $s.' sayısı tektir';
    ?>

    gördüğünüz gibi kod çalışacaktır.else if'tede aynı şey geçerli.Eğer { ve } kullanmazsak sonraki ilk ifade işlettirilecektir.Peki ikinci ifade ne olur ? Deneyelim;

    <?php 
    $s=31;
    if($s % 2 == 0)
    echo $s.' sayısı çifttir';
    echo 'bu if'e ait 2. ifade';
    else
    echo $s.' sayısı tektir';
    echo 'bu else'e ait 2. ifade';
    ?>

    Parse error: syntax error, unexpected T_ELSE in /var/www/lab/c.php on line 6

    gördüğünüz gibi syntax error verdi.C'de böyle yaparsanız ikinci ifadeler ana programa ait gibi görünür fakat phpde syntax error veriyor.

    İf-else ve Switch-case Performans
    Php performans , performansli ve profesyonelce kod yazmak/ yazılarında sanıyorum bahsetmiştim.Fakat tekrar bahsetmek istiyorum.

    Bilgisayarlar adım adım yol alır.Bunu bilirsek kodlarken daha güzel bir kodlama yapabiliriz.Switch-case ile tek sayfada işlemler yapalım.

    site.com/index.php?sayfa=anasayfa
    site.com/index.php?sayfa=hakkimizda
    site.com/index.php?sayfa=dokumanlar

    olsun.Şimdi buna uygun switch-case yapısı yakalayalım.

    switch($_GET['sayfa']){
    case 'hakkimizda';
    //burada hakkımızdaya ait kodlar ve yazıla
    break;
    case 'dokumanlar';
    //burada dökümanlara ait kodlar ve yazıla
    break;
    default:
    /*Burada ise anasayfa kısmı.Yani dokumanlar veya hakkimizda değilse gösterilecek olan kodlar.*/
    }

    Bir çoğumuz böyle yapıyor.Burada bilgisayar şöyle işler; önce sayfa değişkeni hakkimizda mı diye bakar, değilse dokumanlar oda değilse default: kısmındaki kodlar gösterilir.Gördüğünüz gibi o değilse alttaki, o değilse alttaki.Bunu fazla switch-case 'e uyarlarsak ve performans istersek birazcık değişiklik yapmamız gerekiyor.

    Mantıken anasayfa en son bakılan yer olacaktır çünkü default.Ben AyroxBlog'ta bunu birazcık değiştirdim ve ilk bakılan yaptım.İlk bakılanı if/else ile yaptık.Alttaki kodumuzda onu göreceksiniz.

    Fakat dikkatinizi çekmek istediğim nokta hakkimizda ve dokumanlar.Blogta dokumanlar yerine yazilar olur.Başka sitede başka birşey.Şimdi burada amaç en çok kullanılandan en az kullanılana doğru hiyerarşik yapı oluşturmaktır.

    Analytics'e ve benim istatistiklerime göre en çok kullanılandan en az kullanılana doğru sıralama yaparsak : index.php, bilgi (yani hakkımızda), kosul (kullanım koşulları), etiketler, yazi, kategori.... şeklinde sıralanıyor.Fakat en başında index.php var.Yani default kısmımız en çok sıralanan.

    Şimdi if-else ile default: kısmını direkt başa alalım sonra switch-case ile yukarıdaki hiyerarşiye göre bir sıralama yapalım.Tabi benim birazcık farklı $seo['2'] vs.. yaptım AyroxBlog gibi seo konusunda anlattım.

    Ben kolay örnek olması için yukarıdakini değiştirip yazacağım;

    if(empty($_GET['sayfa'])){
    /* burada default: kısmında hangi kodlar varsa aynen yapıştırın.
    dikkat etmeniz gereken nokta, ileride default: kısmında birşey değiştirirseniz buradaki kodlarıda değiştirmelisiniz*/
    }else{
    switch($_GET['sayfa']){
    // şimdi çok kullanılanlara göre sıralıyoruz.Bilgi, kosul, etiketler, yazi, kategori idi.
    case 'bilgi';
    // bilgi kısmına (hakkımızda) ait kodlar.
    break;
    case 'kosul';
    // kosul (kullanım koşulları) ait kodlar.
    break;
    case 'etiketler';
    // etiketler kısmına ait kodlar.
    break;
    case 'yazi';
    // yazilara (blog yazıları) ait kodlar.
    break;
    case 'kategori';
    // kategoriye ait kodlar.
    break;
    default:
    /*burasıda yukarıdakiler değilse gösterilecek kısım.
    Peki neden yukarıda boşsa dedikten sonra burada da yazdık ?
    Çünkü adam sayfa=adsf yazarsa yine anasayfaya gitsin.Tabi bune ya böyle birşey yok demek isterseniz onu yazın.
    Ben kendi blogumdaki gibi yaptım */
    }
    }

    Gördüğünüz gibi bilgisayar tek tek bilgi, kosul, etiketler, yazi, kategori olup olmadığına baktıktan sonra anasayfa'ya ait kodları vermek yerine, direkt anasayfa'ya ait kodları verecek.Tabi boş ise.

    Eğer $_GET['sayfa'] değişkeni boş değilse sırasıyla bilgi, kosul, etiketler, yazi, kategori olup olmadığına bakacak.Eğer birisine uyuyorsa ondan sonrakileri atlayacaktır.

    İf Else Nasıl Olur?
    Eğer switch-case ile değil if-else ile yapsakta aynı şekilde olacaktı.Yani;

    if($_GET['sayfa']=='bilgi'){
    //bilgi kodları
    }else if($_GET['sayfa']=='kosul'){
    //kullanım koşullarına ait kodlar
    }// tek tek diğerleri (yazmıyorum) ve sonunda else; 
    else{ // buradaki else switch'teki default
    //anasayfaya ait kodlar
    }

    Burada da tek tek $_GET['sayfa'] bilgi, kosul vs.. diye bakacaktı.Bunda da hiyerarşik yapı kullanınız.En çok kullanılanı en başa, en az kullanılanı en sona atın.

    Bilgisayar'ın okuma şeklini biraz daha açalım
    Şimdi switch-case yada if/else kullanımında önceliği

    bilgi
    kosul
    etiketler
    yazi
    kategori

    şeklinde verirsek bilgisayar önce değişkenin eşitliğine bakacak.Şöyle bakacak;

    $_GET['sayfa'] değişkeni bilgi ise alttakileri görme;
    bilgi değilse, kosul'a bak, eğer kosul'sa alttakileri görme;
    kosul değilse etiketler'e bak, etiketler ise alttakileri görme;
    etiketler değilse yazi'ya bak, yazi ise alttakileri görme;
    yazi değilse kategori'ye bak, kategori ise alttakileri görme;
    kategori değilse altında default: yada else olacağında o kısmı al.

    Genel olarak mantığı bu.Bu şekilde tek tek gideceğinden fazla satırlı kodlarda azda olsa performans sağlayacağını düşünüyorum.

    Ufak bir bilgi : Eğer switch-case 'de break; kullanmazsak alttakileri olduğu gibi okur.

    <?php
    $s=1;
    switch($s){
    case 1;
    echo 'değişken 1 dir';
    case 2;
    echo 'değişken 2 dir';
    default:
    echo 'değişken 1 yada 2 değildir';
    }
    ?>

    $s=2 ve $s=3 vererek sonuçları görebilirsiniz.Bu yüzden break; kısmını unutmayın.Tabi bazı yerlerde break kullanmamak işimize gelebilir.

    ------
    İf/else ve switch/case kullanımına ait bir sürü döküman bulabilirsiniz.Fakat ben birazcık daha farklı yanını göstermek istedim.Yeniler için veya bilmeyenler için farklı bir döküman olabilir.

    Tahribata özel : yazıyı kendi blogum ve başka sitede yayınladım.Döküman kendi dökümanımdır.Farklı olduğuna, bir çok kişinin bilmediği yanlar olduğunuda düşünüyorum.Bu yüzden tahribatta da yayınlayayım dedim.

    bloguma ait linkler var, onlarıda kaldırmayayım dedim yararlanan olursa buyurabilir.Sevgiler, saygılar :)

    anlamadığınız, takıldığınız yer varsa mesajları bekliyorum.

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Realist
    Realist's avatar
    Kayıt Tarihi: 13/Nisan/2007
    Erkek

    sağol hocam yeni başlayanlar için güzel ben bunları biliyorum ancak,döngülerde biraz problemim var onlarla ilgilide bir doc. hazırlarsan cok sevinirim.


    ..
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Ayro
    Ayro's avatar
    Kayıt Tarihi: 08/Ağustos/2005
    Erkek

    tamam hoca onlar konusunda da yazayım.

    if/else ve switch/case lerde özellikle öncelik konusunda birşeyler bilmek isteidm.Bir çok kişinin switch-case ve if-else if-else kullanırken önceliğe dikkat etmediğini düşünüyorum.amacım performanstı, ayroxblog'ta uygulamaya çalışıyorum.Bu günlerde biraz karıştı ama yeniden yazacağım o zaman daha hızlı oalcak.Şimdi de yazarken yukarıdakilere dikkat ederek yazdım.

    Bir çok yerde de

    if()
    ifade;

    olarak kullandım.Eğer tek satırsa süslü paranteze gerek yok.

    Neyse döngülerde de bir ara yazarım birşeyler 

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Ayro
    Ayro's avatar
    Kayıt Tarihi: 08/Ağustos/2005
    Erkek

    yukarı atayım da son bi kez ne olur ne olmaz

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Antikky
    Antikky's avatar
    Üstün Hizmet Madalyası Üstün Hizmet Madalyası
    Kayıt Tarihi: 01/Mayıs/2003
    Erkek

    Faydası olabilir;

    http://tr.php.net/manual/tr/language.control-structures.php


    Umursamaz Tavrımın Hastası Olunuz.
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Ayro
    Ayro's avatar
    Kayıt Tarihi: 08/Ağustos/2005
    Erkek

    eyw saolasın.AYrıyetten şöyle birşeyde varmış bilmiyordum ;

     

    $s = 30;

    echo ($s % 2 == 0) ? "bu sayı çift" : "bu sayı çift değil";

Toplam Hit: 2885 Toplam Mesaj: 6