2010-07-15 5 views
4

새 예외를 throw하는 경우 예외를 throw하지 않아도되는 경우 단순히 true를 반환하는 것이 가장 좋습니다. 또는 예외를 throw하는 대신 false를 반환하는 것이 가장 좋습니다. 나는 PHP를 사용하여.던져 예외 및 반환 형식

답변

13

모두 당신이하는 일에 달려 있습니다. 내가 반환 값 (A 바보하지만, 예시)을 확인 할 필요가 없도록 개인적으로, 나는 그들에게 모든 시간을 사용

function ArrayToObject(array $array) { 
    $obj = new StdClass(); 
    foreach ($array as $key => $value) { 
     if (!is_string($key)) { 
      throw new Exception('Expects only string keys in the array'); 
     } 
     $obj->$key = $value; 
    } 
    return $obj; 
} 

그런 식으로, 내가 할 수있는 :

$array = array('foo' => 'bar'); 
try { 
    echo ArrayToObject($array)->foo; //Prints "bar" 
} catch (Exception $e) { 
    //Handle error here 
} 

결과 확인시 오류를 걱정하지 않아도됩니다. catch 블록에서 바로 오류를 처리 할 수 ​​있습니다.

그래서 아니,에 (... 예외는 오류 및 당신을 위해 변경된 워크 플로우를 처리하자 ... 당신은 예외를 기반으로 반환하는 건지

보다 실제 예제를 변경하지 않습니다 의사 코드) :

try { 
    open database connection; 
    send query to database; 
    operate on results; 
} catch (DatabaseConnectionException $e) { 
    handle failed connection here; 
} catch (DatabaseQueryException $e) { 
    handle failed query here; 
} catch (Exception $e) { 
    handle any other errors here; 
} 

물론, 즉 데이터베이스 기능을 가정 것은/방법 그것은 함수의 목적과 반환의 이유에 따라 그 예외 ...

0

을 던져. 오류/예기치 않은 상황에서 함수에서 반환하려면 예외를 사용하십시오. 표준 연산에는 반환 값을 사용하십시오.

마찬가지로, 예기치 않은 상황에 플래그를 지정하는 데 반환 값을 사용하지 마십시오. 함수 이 null 포인터 참조에 대해 의미있는 값을 반환하지 않으면 0으로 나누고 데이터 연결이 없으면 예외를 throw해야합니다. 첫째, catch 블록을 사용하여 오류 처리 코드를 격리시켜 보겠습니다. 둘째, 왜 '거짓'이 아닌 실패한 지에 대한 정보를 더 많이 제공 할 수 있습니다. 뭔가가 실패하고 당신이 얻는 모든 정보가 단지 '오류'일 때 매우 성가신 일입니다.

또한 흐름 제어의 대안으로 예외를 throw하지 않으려합니다. 창의성을 발휘하고 동등한 경우 아무 작업도 수행하지 않은 비교 함수를 작성할 수 있습니다. 그렇지 않은 경우 GreaterThanException 또는 LessThanException을 발생시킵니다. 그러나 이제는 표준 처리 코드가 오류 코드와 함께 catch 블록에 포함되므로 오류 처리 코드를 분리하는 이점을 잃어 버렸습니다. 또한 PHP와 같은 많은 환경에서 예외 처리 성능을 확신 할 수는 없지만 예외 객체를 생성하고 반환하는 것보다는 catch 블록에 대한 유형 비교를 수행하는 것이 더 비쌉니다.