Anahtarı deyimi içinde döngüler

4 Cevap php

benim switch ifadesi yaklaşık on bir sonuç vardır, ama bazıları kontrol etmek için 1/2 döngüler gerek, bu yüzden durumda (koşul) içinde bunları yazamıyor, bu yüzden birden fazla varsayılan davayı kullanarak denedim, bu mümkün mü?

<?php

switch(true) {
case 1:
    break;
case 2:
    break;
default:
    echo "this text is never printed ??";

    while(true) {
        while(true) { // case 3
            break 3;
        }

        break;
    }

    while(true) {
        // case 4
        break 2;
    }
case 5:
    break;
default:
    while(true) {
        // case 6
        break 2;
    }
case 7:
    break;
}

?>

olası bu tür bir şey, benim ilk varsayılan olarak tüm yürütme gibi görünmüyor mi?!

teşekkürler

4 Cevap

Bir switch deyiminde birden fazla default olamaz. Ayrıca, default switch Tüm case tabloların sonrası sonunda olmalıdır.

Ne kod PHP motoru üzerinden çalıştırdığınızda might oluyor ayrıştırıcı bir karma harita tip veri yapısı içine switch ifadeleri okuduğunu ve her zaman ayrıştırıcı bir default etiketi bulur olduğunu , bu karma haritada mevcut girdisi yazmadan oluyor. Yani sadece son default etiket yürütülmesinde kullanılan alır veri yapısı biter.

Hayır, bu mümkün değil, bir switch deyimi birden fazla varsayılan durum var olamaz, sen tek bir nihai case ifadesine ek mantığı koymak gerekir.

Varsayılan durumda geldiğinde o kadar daha sonraki davalar değerlendirilir değil bütün koşulları yakalar.

Sorunuzu yanıtlamak için - hayır, sonunda bir varsayılan ve olması mümkündür. Ben varsayılan sonra diğer durumlarda yerleştirebilirsiniz emin değilim, ama ne ben eminim onlar ulaşılabilir asla olduğunu ...

EDIT: Also, I don't see what you're trying to do there. What's the point? Could you explain a bit? We might be able to help you accomplish what you want to do

Bir anahtarı sadece bir varsayılan olabilir. Zend not PHP ayrıştırır tek şey, anahtarın son parçası olarak varsayılan davayı koyarak değil diğer ayrıştırıcılarını karıştırmayın olduğunu unutmayın.