• 21-10-2017, 15:58:07
    #1
    Arkadaşlar if ile switch case arasındaki farkı öğrenmek için aşağıdaki kodu yazdım.

    <!DOCTYPE html>
    <!DOCTYPE html>
    <html>
    <head>
        <title>Koşul</title>
    </head>
    <body>
    <div align="center">
        <h2>IF Statement</h2>
        <form method="POST" action="">
            <br><br>
            <input type="text" name="sayı" placeholder="Sayıyı giriniz." size="25" /><br><br>
            <button type="submit">Hesapla</button>
        </form>
    </div>
    <?php
    if ($_POST)
    {
        $aa=$_POST["sayı"];
        /*
        if ($aa<10) {
            echo "Sayı, 10'dan küçüktür.";
        }
        elseif ($aa<20) {
            echo "Sayı, 20'den küçüktür.";
        }
        elseif ($aa<30) {
            echo "Sayı, 30'dan küçüktür..";
        }
        elseif ($aa<40) {
            echo "Sayı 40'dan küçüktür.";
        }
        else
        {
            echo "Sayı 40'dan büyüktür.";
        }
    */
        switch ($aa) {
            case $aa<10:
                echo "Sayı 10'dan küçüktür.";
                break;
            case $aa<20:
                echo "Sayı 20'den küçüktür.";
                break;
            case $aa<30:
                echo "Sayı 30'dan küçüktür.";
            case $aa<40:
                echo "Sayı 40'dan küçüktür.";
            default:
                echo "Sayı 40'dan büyüktür.";
                break;
        }
    }
    ?>
    </body>
    </html>

    Burda 25 yazdığımda sayı 30'dan küçüktür yazması gerekiyor. Fakat bende
    Sayı 30'dan küçüktür.Sayı 40'dan küçüktür.Sayı 40'dan büyüktür.
    olarak çıkıyor

    Nerde hata yapıyorum ?
  • 21-10-2017, 16:03:48
    #2
    break; olmayan yerleri kontrol edermisiniz hocam. sorunun çözülmesi lazım fakat olurda çözülmezse 25'in hem 30dan küçük olduğunu hem de 40'dan küçük olduğunu unutmayın.
    ek: türkçe karakter (ı) kullanmanızı tavsiye etmem. yazmamaya alışın.
  • 21-10-2017, 16:05:11
    #3
    Default değeri silerseniz hem 30'dan hem 40'tan küçük olduğu için yalnızca ikisini verecektir.
  • 21-10-2017, 16:05:25
    #4
    Bayyn adlı üyeden alıntı: mesajı görüntüle
    break; olmayan yerleri kontrol edermisiniz hocam. sorunun çözülmesi lazım fakat olurda çözülmezse 25'in hem 30dan küçük olduğunu hem de 40'dan küçük olduğunu unutmayın.
    Öyle tabi ama 25 30'dan küçük olduğu için önce ilk kodu çalıştırması gerekmez mi ?

    Bunu yazarken break; kısmı eklemediğimi gördüm

    Teşekkürler.

    Kodun doğrusu.

    <!DOCTYPE html>
    <!DOCTYPE html>
    <html>
    <head>
        <title>Koşul</title>
    </head>
    <body>
    <div align="center">
        <h2>IF Statement</h2>
        <form method="POST" action="">
            <br><br>
            <input type="text" name="sayı" placeholder="Sayıyı giriniz." size="25" /><br><br>
            <button type="submit">Hesapla</button>
        </form>
    </div>
    <?php
    if ($_POST)
    {
        $aa=$_POST["sayı"];
        /*
        if ($aa<10) {
            echo "Sayı, 10'dan küçüktür.";
        }
        elseif ($aa<20) {
            echo "Sayı, 20'den küçüktür.";
        }
        elseif ($aa<30) {
            echo "Sayı, 30'dan küçüktür..";
        }
        elseif ($aa<40) {
            echo "Sayı 40'dan küçüktür.";
        }
        else
        {
            echo "Sayı 40'dan büyüktür.";
        }
    */
        switch ($aa) {
            case $aa<10:
                echo "Sayı 10'dan küçüktür.";
                break;
            case $aa<20:
                echo "Sayı 20'den küçüktür.";
                break;
            case $aa<30:
                echo "Sayı 30'dan küçüktür.";
                break;
            case $aa<40:
                echo "Sayı 40'dan küçüktür.";
                break;
            default:
                echo "Sayı 40 veya 40'dan büyüktür.";
                break;
        }
    }
    ?>
    </body>
    </html>
  • 21-10-2017, 16:08:16
    #5
    Mf.Rub adlı üyeden alıntı: mesajı görüntüle
    Öyle tabi ama 25 30'dan küçük olduğu için önce ilk kodu çalıştırması gerekmez mi ?

    Bunu yazarken break; kısmı eklemediğimi gördüm

    Teşekkürler.

    Kodun doğrusu.

    <!DOCTYPE html> <!DOCTYPE html> <html> <head> <title>Koşul</title> </head> <body> <div align="center"> <h2>IF Statement</h2> <form method="POST" action=""> <br><br> <input type="text" name="sayı" placeholder="Sayıyı giriniz." size="25" /><br><br> <button type="submit">Hesapla</button> </form> </div> <?php if ($_POST) { $aa=$_POST["sayı"]; /* if ($aa<10) { echo "Sayı, 10'dan küçüktür."; } elseif ($aa<20) { echo "Sayı, 20'den küçüktür."; } elseif ($aa<30) { echo "Sayı, 30'dan küçüktür.."; } elseif ($aa<40) { echo "Sayı 40'dan küçüktür."; } else { echo "Sayı 40'dan büyüktür."; } */ switch ($aa) { case $aa<10: echo "Sayı 10'dan küçüktür."; break; case $aa<20: echo "Sayı 20'den küçüktür."; break; case $aa<30: echo "Sayı 30'dan küçüktür."; break; case $aa<40: echo "Sayı 40'dan küçüktür."; break; default: echo "Sayı 40 veya 40'dan büyüktür."; break; } } ?> </body> </html>
    Evet hocam haklısınız fakat ilerde olurda php projeler yaparsanız ve var olan bir yapıya bir ekleme daha yaparken sıralamayı bozabilirsiniz dolayısıyla sıralama bozulduğundan yanlış sonuçlar çıkartabilir.
  • 21-10-2017, 16:31:23
    #6
    Switch/Case ve If/Else arasında temel bazı farklar vardır. Switch/Case adresleme yöntemi ile çalışır ve en uygun ilk eşleşmeye girerek işlemleri yapar ve switch bloğundan break komutu sayesinde çıkar. If/Else ise koşul sağlanana kadar tüm if/else kontrol bloklarını çalıştırır. Temel fark budur. Performans konusunda da küçük bloklarda switch/case daha performanslı çalışırken if/else kontrolü büyük bloklarda daha performanslı çalışır. Sizin kodlarınızda koşul kontrolü olduğu için en uygun kod If/else. Eğer direk bir değere eşitlik arıyor, etiketleme yöntemi kullanmak istiyorsanız o zaman switch/case kullanmanızı öneririm. Aşağıda buna örneği görebilirsiniz.
        switch ($deneme) {
            case 'etiket1':
                # kodunuz...
                break;
            case 'etiket2':
                # kodunuz...
                break;
            
            default:
                # kodunuz...
                break;
        }
    Bu da performans karşılaştırması:
    i: 0
    elseif took: 6.2942504882812E-5
    switch took: 3.504753112793E-5
    i: 10
    elseif took: 6.4849853515625E-5
    switch took: 4.3869018554688E-5
    i: 100
    elseif took: 0.00014805793762207
    switch took: 0.00011801719665527
    i: 1000
    elseif took: 0.00069785118103027
    switch took: 0.00098896026611328
    i: 10000
    elseif took: 0.0059938430786133
    switch took: 0.0074150562286377
    i: 100000 (first non-existing offset)
    elseif took: 0.043318033218384
    switch took: 0.075783014297485