Tekrarlayan eğer Switch döngü

4 Cevap php

Ben Anahtarı durumlarda her döngü biraz tekrarlayan beri ise aynı yapmak zorunda kalmadan yapabilirsiniz zaten var olup olmadığını bilmek istiyorum.

switch ($val) {
    case 1:
    	if(!$object->doSomething1()==$goodValue)
    	row .= $object->doSomething();
    	break;
    case 2:
    	if(!$object->doSomething2()==$goodValue)
    	row .= $object->doSomething();
    	break;
    case 3:
    	if(!$object->doSomething3()==$goodValue)
    	row .= $object->doSomething();
    	break;
}

4 Cevap

Neden sadece eğer döngü içinde bütün davayı şal değil mi?

if(!$object->doSomething()==$goodValue) {
    switch ($val) {
        case 1:
            row .= $object->doSomething();
            break;
        case 2:
            row .= $object->doSomething();
            break;
        case 3:
            row .= $object->doSomething();
            break;
    }
}

if bir döngü bazı kafa karıştırıcı olabilir, bu bir durum var, değil.

Sorunuzun olarak: Eğer farklı yöntemler test beri ise en yinelenen değil hayır (basit, aklı başında) bir yol yoktur. Eğer hepsi farklı koşullarda test, sonra hepsi değil.

Sürekli yöntem adlarını varsayarak, ya da (call_user_func gibi şeyler kullanmadan), sadece hafif bir modifikasyon:

switch ($val) {
    case 1:
        $doResult = $object->doSomething1();
        break;
    case 2:
        $doResult = $object->doSomething2();
        break;
    case 3:
        $doResult = $object->doSomething3();
        break;
}
if($doResult !== $goodValue)
    row .= $object->doSomething();

Eğer $ nesnenin iç yapıları hakkında çok fazla bilgi ihtiyacı gibi doSomething1/2/3 ne hakkında çok fazla bilmeden bu sesler. Bunun yerine $ val almak ve doSomething1/2/3 içten $ val bağlı olabilir $ nesne üzerinde bir işlevi açığa değer olabilir.

if(!$object->doSomething($val)==$goodValue)
        row .= $object->doSomething();
        break;
}