2013-02-26 3 views
0

필자는 코드에 일련 화 된 IF 문을 길게 나열하지 않아야합니까? 때로는 피할 수없는 것처럼 보이지만, 저의 경험이 부족한 것인지 궁금합니다. 이미지를 처리하는 경우 예를 들어 IF 문의 긴 목록을 피해야합니까?

, 사용자는 업로드 - 당신은 오류에 대한 정확한 피드백을 제공하고자하는 - 당신과 같이있을 수 있습니다 :

if($file["size"] == 0) { 
    throw new Exception("ERROR: File was empty"); 
} 

if (($file["type"] != "image/gif") 
|| ($file["type"] != "image/jpeg") 
|| ($file["type"] != "image/pjpeg") 
|| ($file["type"] != "image/png")) { 
    throw new Exception("ERROR: Image must be either GIF, PNG or JPEG!"); 
} 

if ($file["size"] > 2000000) { 
    throw new Exception("ERROR: Image must be than less 2MB!"); 
} 

    if ($file["error"] > 0) { 
    throw new Exception("UNKNOWN ERROR: ".$file['error']); 
} 

$imgDetails = getimagesize($file["tmp_name"]); 

if($imgDetails['channels'] != 3){ 
    throw new Exception("ERROR: Image must be RGB.)"; 
} 

if($imgDetails['0'] < 50 && $imgDetails['1'] < 50) { 
    throw new Exception("ERROR: Image must be larger then 50 x 50.)";   
} 

등 등 등 결국 파일은 모든 테스트를 통과하여 처리됩니다.

"나쁜 습관"입니까?

답변

1

in_array을 사용하여 유형 검사를 단축 할 수 있지만 일반적으로이 기능은 출력을이 기능에서 직접 푸시하는 것을 제외하고는 좋은 형식입니다. 이 작업이 클래스에서 완료되면 오류 출력을 직접 푸시하는 대신 예외를 사용하는 것이 좋습니다.

조기 반품, 반품

+0

그것은 현명하게 들린다! :) 나는 예외에 관해 위로 읽고 있었다. 그리고이 blog는 나를 완전히 혼란시켰다. 위의 예외 유형은 무엇입니까? http://blogs.msdn.com/b/kcwalina/archive/2007/01/30/exceptionhierarchies.aspx –

+0

얼마나 멀리 가고 싶은가에 달려 있습니다. 원하는 모든 것이 메시지를 전달하는 경우에만 기본 예외 클래스를 사용하여 제거 할 수 있습니다. 예외 클래스를 설정하면 각 예외 유형을 다르게 처리 할 수 ​​있으므로 필요하지 않을 수 있습니다. – datasage

+0

고마워, 지금은 질문을 업데이 트했습니다 - 그냥 좋은 측정을 위해 :) –

0

임의의 제한 사항을 나열하는 대신 제한 컬렉션을 만들고 해당 컬렉션을 살펴 보는 코드를 만들 수 있습니다.

내가 자바 스크립트에서이 작업을 수행하는 방법을 잊어 있지만, How do I check if an array includes an object in JavaScript?

비슷한는 희망이 좀> 도왔다.>

+1

이것은 자바 스크립트가 아닌 PHP입니다. – Barmar

0

내가 찾을 당신이 깡통에 대해 얘기하고 체인 경우의 보통 종류 함수의 해시 맵으로 변형되어 일부 선택자를 키로 사용합니다.

$processImage = { "image/gif" => function processGIF(){blah} }과 같은 해시지도가있는 경우 O (n/2) 평균 대신 O (1)의 각 함수에 액세스 할 수 있습니다 (정확하지 않은 정규 분포가 있다고 가정). 당신이 알듯이, 그것이 아주 많이 발생하지 않는다면,별로 중요하지 않습니다.

그런 다음 $processImage["image/gif"]();을 사용하여 해당 함수를 호출 할 수 있습니다 (나는 최근 몇 년 동안 PHP보다 더 많은 JS를 해봤이 유효한 구문 생각합니다.)

을 나는 꽤 확장 할 해시 맵 접근 방식을 찾을 수 있습니까 및 너무 읽기 쉽기 때문에 그렇게 할 수 있습니다.

리팩토링에 적합한 것이 있습니다.하지만 많은 경우에있어서 이점은 최소/상황 적입니다.