Switch ifadesinde garip davranış

0 Cevap php

Arama sonuçlarında bir dizi (oluştururken başlığındaki linklere tıklayarak idam BY ORDER değiştirmek sıralanabilir tablo için kod yazıyorum tarafından sipariş ile çalıştırmak değil nedenleri sorgu tarafından hiçbir geçerli düzen orada olduğu durumda ve sadece sipariş veritabanı geri döner sonuçları döndüren. olarak tasarlanmış bu). Kod benim işveren tarafından sağlanan bir çerçeve içinde yazılı ediliyor.

Ben aşağıdaki doğrulama işlevi aracılığıyla girişini çalıştırmak sorgunun parçası BY ORDER doğrulamak için.

<?php
function sortMode ($name)
{
    $mode   = '';
    switch ($name)
    {
        case 'resnum'   : $mode = 'b_resnum';            break;
        case 'state'    : $mode = 'st_id';               break;
        case 'name'     : $mode = 'lastname, firstname'; break;
        case 'phone'    : $mode = 'phone';               break;
        case 'email'    : $mode = 'email';               break;
        case 'opened'   : $mode = 'cs_created';          break;
        default         : $mode = '';                    break;
    }
    return ($mode);
}
?>

Test altında ben hiçbir parametre sağlanan eğer sıralama düzeni resnum olacağını keşfetti. Bazı denemeler sonra, ben çerçeve içine yerleşik filtreleme gibi tamsayı 0 dönmek için bir unset GET parametresi olarak başlatılmamış bir değişken için bir istek neden olacağını keşfetti. Yukarıdaki kod her zaman ilk takip edecek girişi olarak bir tamsayı 0 beslenen var ise Bunun için mevcut icra yolu.

Bir deneme olarak ben switch deyimi olguların sırasını yeniden denedim, ve bu fonksiyon 0 geçildi ise idam edildi ne olacağını üst oldu ne buldum.

Sorunun çözümü anahtarı (strval ($ isim)) kullanılarak bu yüzden özel bir sorun çözüldü, ama şimdi ben PHP anahtarı tabloların genel davranış olarak merak ediyorum. Ben PHP için doğru davranış tanık davranış mı? Bu neden oluyor PHP bazı arıza var mı, ya da ben farkında değilim, benim kodunda bir hata yaptık?

0 Cevap