2017-12-23 20 views
1

뼈에 자신을 비난 할 위험이 있습니다. 나는 여전히 질문을합니다 : PHP에서 "andif"와 같은 것이 있습니까? 아니면 어떻게하면 아래의 우아한 방법으로 해결할 수 있습니까?php andif 문, fall through

시나리오 : 첫 번째 테스트, 사실 일 경우 처리 (예 : 연락 서버)를 한 다음 두 번째 테스트를 수행하고, 세 번째 테스트를 수행 한 다음 결과를 수행하거나, - 항상 동일한 오류를 출력합니다. 내가 시뮬레이션 '을 통해 가을'사용할 수있는 함수에서

if (...) { 
    do something... 
    andif (test) { 
     do something more ... 
     andif (test) { 
     do } 
else { 
    collective error } 

: 대신 다른 문마다 반복

...

if (....) { 
     contact server ... 
     if ( ... ){ 
     check ...  
      if ( ...) { 
       success ; 
      } else { failure ...  } 
     } else { failure ...  } 
} else { failure ...  } 

은 .. 나는 그런 일을 찾아 성공의 경우 반환 :

function xx { 
if {... if {... if {... success; return; }}} 
failure 
} 

..하지만 주 프로그램에서?

+0

뭔가 잘못되었을 때 예외를 throw하는 곳에'try'와'catch'를 사용할 수 있습니다. 함수에서 'fall through'를 할 수 있다면 – Mikey

답변

0

PHP에는 andif 연산자가 없지만 조기 반환 (또는 "페일 패스트") 관용구를 사용하고 테스트가 실패 할 때마다 실패를 반환 할 수 있습니다. 내가 첫 번째 오류를 확인 할

function xx { 
    if (!test1) { 
     return failure; 
    } 

    someProcessing(); 
    if (!test2) { 
     return failure; 
    } 

    // Etc... 

    return success; 
} 
+0

. 위 참조. – user30424

0

: 등등

if (not_true) { 
    return; 
} 

connect_server; 

if (second_not_true) { 
    return; 
} 

check; 

그리고를 ...

또한 여러 할 수있는 그런 식으로, 당신은 else의 한 무리가 필요하지 않습니다 하나의 if 문을 logical operators으로 체크인하십시오. 예를 들어 : PHP에서 같은 andif 그런 일이 없기 때문에

if (test && second_test && third_test) { // means if test is true and if second_test is true and if third_test is true 
    // do the stuff if success... 
} else { 
    // do the stuff if errors... 
} 
+0

네, 함수에있을 특권을 가지고있을 때 ... – user30424

+0

@ user30424'&&'에 대해 들었습니까? – JazZ

+0

요점은 첫 번째 테스트가 성공한 직후에 서버에 접속하고 싶다는 것입니다. 물론 서버에서 모든 데이터를 수집 한 다음 && 연산자를 사용할 수 있습니다. – user30424

0

아니라, 내가 할 수있는 유일한 방법은 생각 - 숨 길게 (... 크리스마스를 망치고 죄송합니다)

을 GOTO 을
if (....) { 
      contact server ... 
      if ( ... ){ 
      check ...  
       if ( ...) { 
        success ; 
        goto success; 
       }}} 
    failure; 
    success: 
    continue... 

기타 모든 것들이 더 복잡해 보입니다.