2009-09-23 4 views
0

어쨌든 반복적이기 때문에 각 Switch 케이스에서 동일한 If 루프를 수행하지 않고도이 작업을 수행 할 수 있는지 알고 싶습니다.스위치에서 반복되는 if 루프

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; 
} 
+0

그것은 인위적인 예입니다하지만 당신은 switch 문에서이 왜 내가 볼 수 없기 때문에이 될 수있다 모두 모든 경우가 똑같은 일을합니다. – Jackson

+0

그는 각각의 경우에 다른 함수를 호출합니다. – BraedenP

+0

모든 답변자 : '주의'는 동일하지 않으므로 다른 방법을 3 번 테스트합니다. 내가 지금까지 본 모든 대답은 틀린 가짜다. – knittl

답변

1
switch ($val) { 
    case 1: 
     $method .= 'method1'; 
     break; 
    case 2: 
     $method .= 'method2'; 
     break; 
    case 3: 
     $method .= 'method3'; 
     break; 
} 
$funcVal = $object->$method(); 
if(!$funcVal==$goodValue) $row .= $funcVal; 
+0

if (! $ object -> $ method() == $ goodValue) $ row. = $ object -> $ method(); 나는이 – Roch

+0

을 시도하고 있지만 포인트는 동일하게 수행되고, 수행되는 작업은 동일하며 메서드 호출 만 다르기 때문에 전환해야합니다. – NDM

+0

하지만 동일한 방법을 수행하려는 경우 2 번 호출하면 그 결과를 저장하는 것이 더 낫습니다 ... – NDM

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

나는 그가 각 경우마다 다른 기능을 부르고 있었다고 생각했다. 그렇지 않으면 이것은 좋은 생각 일 것입니다. – Tom

+0

예제에서 if 문에서 doSomething 다음에 중괄호로 묶인 $ val에주의하십시오. 예를 들어 '있는 그대로'가 필요한 경우, 내 대답이 작동합니다. 그 시점에서 –

+1

은 왜 switch 문을 가지고 있습니까? – GSto

1

왜 그냥 경우 루프 전체 케이스를 포장하지?

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

미안 해요 전화하는 함수가 각 경우에 동일하지 않다는 점을 잊어 버렸습니다. – Roch

+0

실제로 각 값에 대해 if 문에 다른 함수 이름이 있음을 알았습니까? – paxdiablo

+0

각 경우에 호출되는 함수가 동일하지 않으면 반복적이지 않습니다. 그렇지? – Kennethvr

1

doSomething1/2/3이 $ object의 내부에 너무 많은 정보가 필요한 것처럼 들리는 것에 대해 많이 알지 못합니다. 내부적으로 $ val에 의존하는 $ object에 함수를 노출하고 $ val에 따라 doSomething1/2/3을 노출하는 것이 가치가 있습니다.

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

if는, 당신은 몇 가지를 혼동 할 수있는 조건의 루프 아니다.

귀하의 질문에 : 당신이 다른 방법을 테스트하고 있기 때문에 (단순하고 정상적인) 방법을 반복하지 않는 경우가 있습니다. 당신은 결국, 그들은 모두 다른 조건을 테스트하지 않습니다.

1

연속 메소드 이름을 가정, 또는) call_user_func (같은 단지 약간의 수정을 물건을 사용하지 않고 :

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(); 
관련 문제