2014-06-12 2 views
1

여기에 특정 변수가 가끔더 일반적인 사례를 IF 문에 넣는 것이 더 효율적입니까?

여기 경우 내있어 "오류"메시지를 에코 싶어하는 경우, (그것으로 연결된 일부 공백 제외) 비어있을 것입니다 내 최근 작업

했다 문 : 오류가 예외가 아닌 규범 먼저 가장 일반적인 경우를 예측 쿼리를 작성하는 더 효율적이기 때문에

if(preg_match("/^\s+$/",$var[$i])) { 
    echo "Description not available"; 
} else { 
    echo $var[$i]; 
} 

내 질문은 무엇입니까?

예컨대 :

if(!preg_match("/^\s+$/",$var[$i])) { 
    echo $var[$i]; 
} else { 
    echo "Description not available"; 
} 

아니면 더 효율적이 될 것이라고이 쓸 수있는 더 좋은 방법이 있나요?

차이점은별로 다르지 않지만 전혀 차이가 없을 수 있습니다. PHP 엔진이 어떻게 작동하는지 모르겠습니다.

+1

'if'와'else'의 순서는 아무런 차이가 없지만'preg_match'는 꽤 큰 검사입니다. 'if (trim ($ var [$ i])))'는 아마도 더 빠를 것입니다. 또는 if (trim ($ var [$ i]))'는 똑같은 것입니다. – IMSoP

답변

0

몇 년 전 (PHP 5.x에서) 몇 가지 벤치 마크를했는데, 음수 연산자를 사용하는 시간 또는 공간 최적화가 있는지 명확하게 말할 수 없었습니다.

모두 가독성에 따라 다르며,이를 위해 제 의견은 오류 사례부터 시작하는 함수/메소드에 대한 것입니다. 목표는 중첩 된 수준을 내 기능으로 축소하는 것입니다. 당신은

function foo() 
{ 
    if ($a !== 1) { 
     return doA(); 
    } 
    if ($b !== 2) { 
     return doB(); 
    } 
    if ($c !== 3) { 
     return doC(); 
    } 
    return doD(); 
} 

는 부울 조건을 전환하는 것만으로 감소 방법 중첩 수준을 참조 할 수있는 대신

function foo() 
{ 
    if ($a === 1) { 
     if ($b === 2) { 
      if ($c === 3) { 
       return doD(); 
      } else { 
       return doC(); 
      } 
     } else { 
      return doB(); 
     } 
    } else { 
     return doA(); 
    } 
} 

의 :

예.

물론 이것은 개인적인 용도와 환경 설정 일 뿐이며 여기에는 규칙이없고 최적화가 없습니다.

+0

가독성이 더 좋으면'elseif '를 사용하는 것이 좋을 것입니다.'return's 때문에 하나의 브랜치에 도달 할 수는 있지만, 그렇지 않습니다. 좀 더 복잡한 코드 블록으로 한눈에 알 수 있습니다. – IMSoP

+0

경험을 공유해 주셔서 감사합니다. – Drewdavid

+1

"벤치 마크"를 의미합니까? –

1

실제로 차이점은 없습니다. 일반적으로 이해하기 쉬운 if()의 논리를 목표로합니다 (추가로!는 인간 파싱의 복잡성을 증가시킵니다). 즉, if의 본문이 else에서 짧은 양의 코드로 상대적으로 커지면 끝납니다. 오류의 경우 논리를 반대로하고 오류를 먼저 넣으면 오류와 대부분의 논리를 함께 볼 수 있습니다.

4

중요하지 않습니다. 그게 사용자 환경 설정. 그러나 더 많은 사람들이 처음부터 가장 일반적인 사례를 쓰고 싶어한다고 생각합니다. 어쨌든, 왜 당신은 예를 들어 preg_match를 사용하고 있습니까? 나는 처음에는 가장 일반적인 케이스를 사용하고 -

당신이 볼처럼
if(!empty($var[$i]) && !ctype_space($var[$i]) {  
    echo $var[$i]; 
} else { 
    echo "Description not available!"; 
} 

:

는를 작성하는 가장 쉬운 방법이 될 것입니다.

공백을 확인하기 위해 제 대답을 편집했습니다. 어쨌든 공백 검사를하면 정규식이 더 깨끗한 해결책 일 것입니다.

+0

고마워, 나는 빈 함수에 대해 몰랐다. 나는 그걸 시도 할 것이다. – Drewdavid

+0

'empty()'는 공백을 포함하는 문자열에 대해서는 true를 반환하고, 정말로 공백을 포함하는 문자열에 대해서는 true를 반환하지 않는다. – IMSoP

+0

아, 죄송합니다. 그 부분을 읽지 않고, 제 질문을 편집 할 것입니다. @IMSoP – Xatenev

0

이 더 빠르게 난 당신이 if 문을 중첩 한 경우 당신이 일을 속도를 먼저 가장 일반적인 결과를 테스트하도록 구성 할 수 있습니다

if (! empty(trim($var[$i]))){ 
    echo "Description available!"; 
    } 
else{ 
    echo "Description not available!"; 
    } 
1

을 것 같아요.

AND 및/또는 OR이 포함 된 복잡한 명령문이있는 경우 명령문을 "빨리 실패"하도록 정렬 할 수 있습니다. F.e. AND을 사용하고 가능성이 가장 높은 옵션을 먼저 false로 설정하면 프로그램이 두 번째 테스트를 더 자주 건너 뛸 수 있습니다.

귀하의 주어진 예는 이들 중 하나를 수행하지 않습니다. 따라서 IF 문을 재주문하여 속도를 높일 수는 있지만 특정 예제에서는 불가능합니다 (@Xatenev에서 제공 한 아이디어를 따르지 않는 한).

+0

감사합니다 이것은 도움이 될만한 예제 또는 참조가 있지만 그것은 의미가 있습니다 – Drewdavid

관련 문제