switch deyimi ilk seçenek olarak varsayılan?

8 Cevap php

Ben bu test ettik ve iyi çalışıyor, ama benim için ... ... garip görünüyor. Ben bu PHP'nin sonraki sürümünde atılır standart olmayan şeklidir, ya da durabilir o endişe olmalıdır? Ben her zaman asla ilk vaka olarak, son durum olarak varsayılan bir dava yaşadım ...

switch($kind)
{
    default:
    	// The kind wasn't valid, set it to the default
    	$kind = 'kind1';
    	// and fall through:

    case 'kind1':
    	// Do some stuff for kind 1 here
    	break;

    case 'kind2':
    	// do some stuff for kind2 here
    	break;

    // [...]

    case 'kindn':
    	// do some stuff for kindn here
    	break;

}

// some more stuff that uses $kind here...

Dava Ama anahtarı aynı zamanda bazı işlemleri gerçekleştirir ve sonra $ tür yanı sıra anahtarından sonra kullanılan Bu nedenle varsayılan bulunuyor: (durumda ne yapmak çalışıyorum $ tür sağlamak olduğu açıktır değil geçerli, dolayısıyla varsayılan..: ) İlk durumda aracılığıyla düşer, hem de $ tür setleri

Önerileriniz? Bu normal / geçerli sözdizimi mi?

8 Cevap

Bu, bunu okuyorsanız zaman biraz duraklama neden, bir an alışılmadık bir deyim olduğunu "ha?". Bu çalışır, ama insanların çoğu muhtemelen sonunda varsayılan durumda bulmak için beklediğiniz:

switch($kind)
{
    case 'kind2':
        // do some stuff for kind2 here
        break;

    // [...]

    case 'kindn':
        // do some stuff for kindn here
        break;

    case 'kind1':
    default: 
        // Assume kind1
        $kind = 'kind1';

        break;

}

Ben şahsen bunu tercih ederim

switch($kind)
{
    case 'kind2':
        // do some stuff for kind2 here
        break;

    // [...]

    case 'kindn':
        // do some stuff for kindn here
        break;

    case 'kind1':
    default:
        $kind = 'kind1'; // Redundant if it's already set as 'kind1', but that doesn't make any difference to the code.
        // Do some stuff for kind 1 here
        break;

}

Ben yaptım durumda herkes google aracılığıyla bu sayfayı bulmak:

I was wondering the same thing as Josh - so... One thing is standards, which I think we should all try harder to adhere too, but another thing is hacking (in the: exploit-every-possibility kinda way).

Bu normal değil / garip / çirkin olsa da - mümkün IS ve IMHO bazı nadir durumlarda yararlı olabilir ...

Aşağıdaki düşünün:

$color = "greenish";
//$color = "green";

switch($color) {
    default:
        echo "no colors were selected so the color is: ";
    case "red":
        echo "red<br />\n";
        break;
    case "blue":
        echo "blue<br />\n";
        break;
    case "green":
        echo "green<br />\n";
        break;
}

$color = "greenish"; kod yazdıracaksa

Hiçbir Renkler çok rengi kırmızı seçildi

$color = "green"; ya da başka herhangi bir tanımlanmış durumlarda ise, sadece rengini yazdırmak olurken.

It know it not the best example, but you get the point ;) Hope it helps somebody.

Tür bana ilk başta sancı yaptı, ama biz şeyleri bu şekilde görmeye kullanmayın çünkü sadece budur.

Ben biraz bu "zor" kod diyebilirsiniz beri, son derece bu belge öneririm. Bir çaylak ya da gelecekte bazı sürdürme gelip ve onlar ile daha rahat konum altına taşıyın ve üst olmak gelmiştir yan etkisini kırmak olabilir.

Yaygın uygulama son seçenek olarak varsayılan seçeneği tanımlamaktır. (Önceden tanımlı şema kodunuzu düzen nasıl şirket varsa) Ama senin çözümü ile yanlış bir şey görmek

Bu göze kolay ve işlevselliği tutar ... Herhalde bunu yapardım nasıl.

switch($kind)
{
    case 'kind1': default :
        // Do some stuff for kind 1 here
        break;
    case 'kind2':
        // do some stuff for kind2 here
        break;
    case 'kindn':
        // do some stuff for kindn here
        break;
}

O aynı nedenle tuhaf görünüyor

else {
   echo "lol";
}
if (1 == 1) {
   echo "bbq";
}

geçerli olsaydı, garip olmazdı. Yalnız bu nedenle bunu önlemek istiyorsanız.

Buna ek olarak, every time Birisiyle kod, ilk default davayı koyarak kasıtlı olduğunu açıklamak zorunda gidiyoruz gösteriyor ki biliyorum; Bu genellikle iyi bir fikir değil bir işaretidir.

Bu vakalar arasında kırılma değil, özellikle akış kontrolü için gerçekten kullanışlı olabilir.

Örneğin:

$step = $_GET['skip_to_step'];
switch($step) {
    default:
    case 'step1':
        // do some stuff for step one
    case 'step2':
        // this follows on from step 1 or you can skip straight to it
}

Sen 'eğer bir ek eklemek, ya da zeki' ya da 'sen anahtarını başlar ama bu okunabilirliği azaltır sadece ekstra kod önce 'step1' için $step varsayılan yapmak için. Olabilir