2012-04-27 6 views
2

나는 사용자 클래스의 객체를 생성하지만 사용자가 뭔가를 반환 할 필요가 발견되지 않으면 방법이 있지만 확실하지 않다 무엇 :

function getUserById($id) 
{ 
    $sth = $this->db->prepare("SELECT id, username, password, salt, email, created, last_active FROM users WHERE id = ?"); 
    $sth->execute(array($id)); 

    $sth->setFetchMode(PDO::FETCH_OBJ); 

    if ($sth->rowCount() == 0) { 
     //return what? 
    } 

    $row = $sth->fetch(); 
    $user = new User($row); 

    return $user; 
} 

그리고 그 방법은 다음과 같이 사용한다 :

$user = $user_mapper->getUserById($id); 

사용자가 발견되지 않는 경우 내가 처리하는 방법을 질문은? try catch 블록을 사용하고 나서 statement에 rowCount == 0 if를 던지거나 false를 반환하고 $ user 변수를 객체에 설정할 때 if 문을 사용해야합니까?

+0

나는 false를 반환하는 것으로 충분하다고 생각합니다. 다른 방법을 추적하면 대답을 기다립니다. – nu6A

답변

5

그건 완전히 당신과 당신의 오류 처리 철학에 달려 있습니다.

다음을 기준으로 결정할 수 있습니다. 예외적 인 이벤트입니까? 이 일은 절대로 일어나지 않아야합니까?
대답이 인 경우 예외를 throw하십시오. 대답이 일 경우이 문제가 발생할 수 있습니다.이 경우를 처리해야합니다., return false.

+3

+1 좋은 답변입니다. – freshnode

+1

'null'을 반환하는 것이 좋습니다. 그것은 전체 이야기를 말해줍니다 (* 사용자가 발견되지 않았습니다). – kapa

+0

@ baž 나는'false'를 선호합니다. 값을 반환하지 않는 함수의 반환 값은 이미 'null'이고, 'false'는 일반적으로 "시도한 것이 작동하지 않음"을 나타내는 데 사용됩니다. – deceze

0

일관된 로깅 방법 또는 한 기능에서 관리 할 수있는 사용자에게 피드백하는 방법을 사용할 수 있으므로 사용자 지정 예외 처리기를 추가하는 것이 좋습니다. 몇 가지 지침은 http://php.net/manual/en/function.set-error-handler.php을 참조하십시오.

그래서 예외를 던지려면 설명이되도록 노력하십시오. 또한 예외가 트리거되었을 때 debug_backtrace을 사용하여 실행 상태를 확인할 수도 있습니다. http://www.php.net/manual/en/function.debug-backtrace.php을 참조하십시오.

1

null을 반환합니다. 이 함수는 하나의 책임을 갖는다 : id에 따라 사용자를 찾는다. 아무 것도 발견하지 못했다면 아무 것도 발견하지 못했고 "null"이라고 정확히 말합니다. 그런 다음이 함수를 호출하는 코드가 문제를 처리해야합니다.

이제 로그인/암호가 아닌 ID로 사용자를 찾고 있기 때문에 예를 들어 예외를 throw해야합니다. 응용 프로그램의 어딘가에 뭔가 문제가있을 수 있습니다. 이드는 데이터베이스의 어떤 것과 연결되어야합니다.