2012-01-11 7 views
0

개체가 false를 반환했는지 여부를 어떻게 확인할 수 있습니까? 내가 해봤PHP : OOP : False 반환

class Test { 
    public function __construct($number) { 
     if($number != '1') { 
      return FALSE; 
     } 
    } 
} 

: 나는 다음과 같은 클래스가

$x = new Test('1'); 
$x = new Test('2'); 

을하지만 ($의 X)를 위해서 var_dump 때, 나는 같은 결과를 얻을 수 있습니다. 내가하고 싶은 :

if(! $x = new Test('1')) { 
    header("location: xxx..."); 
} 
+0

참조 스레드 - http://stackoverflow.com/questions/2214724/php-constructor- 반송 용으로 – adatapost

답변

0

deceze가 말했듯이 생성자는 값을 반환 할 수 없습니다. 당신은 같은 false를 반환 팩토리 메소드 만들 수 있습니다

class Test 
{ 
    public function __construct($number) { 
     ... 
    } 

    public function factory($number) { 
     return ($number != '1') ? false : new self($number); 
    } 
} 

$x = Test::factory('1'); 
if (!$x) { 
    header('Location: ...'); 
} 

을하지만 예외를 사용하는 것 대신

class Test 
{ 
    public function __construct($number) { 
     if ($number != '1') { 
      throw new IllegalArgumentException('Number must be "1"'); 
     } 
     ... 
    } 
} 

try { 
    $x = new Test('1'); 
} catch (Exception $e) { 
    header('Location: ...'); 
} 
+0

Ok. 새 객체를 만들 때마다 시도하고 잡는 것이 가장 좋습니까? 아니면 클래스에서 한 번 수행하고 처리 할 수 ​​있습니까? (어느 것이 더 나은 관행인가?) – execv

+0

2 개의 추가 질문 : 1. 모든 방법을 시도해야합니까? (예 : try {$ user-> getEmail();} catch (..) {..} 2. 양식 데이터의 유효성을 검사 할 때 사용해야합니까? (예 : $ data [ 'name'] = ''; $ user-> updateName ($ data); // 메서드가 그 이름이 비어있는 것을 발견하면 그냥 메시지를 반환해야합니까, 아니면 예외를 throw해야합니까?) – execv

+0

@Nathan 여러분은 단순히 모든 catch를 "catch"해서는 안됩니다 예외가 발생할 수 있기 때문에 이름이 말하는 것처럼 예외적 인 상황 * 예외적 인 상황 *은 결코 일어나지 않아야합니다 *. 일어난 경우 응용 프로그램에 오류가있어 예외적 인 상황을 선언하는 것입니다 일반적으로 예외 상황을 사용하지 마십시오. 대부분의 예외 사항은 특별히 잡히지 않아야합니다. 특히 이와 같은 사소한 경우 특히 그렇습니다. – deceze

6

당신은 어떤 생성자로부터의 무엇이라도 할 수 없다. 객체의 생성을 실패 시키려면 throwException으로 설정해야합니다.