2011-05-06 4 views
21

$foo 변수에서 foo가 false 여야한다는 것을 어떻게 알 수 있습니까?PHP - 생성자 함수가 false를 반환하지 않습니다.

class foo extends fooBase{ 

    private 
    $stuff; 

    function __construct($something = false){ 
    if(is_int($something)) $this->stuff = &getStuff($something); 
    else $this->stuff = $GLOBALS['something']; 

    if(!$this->stuff) return false; 
    } 

} 

$foo = new foo(435); // 435 does not exist 
if(!$foo) die(); // <-- doesn't work :(

답변

32

생성자에서 값을 반환 할 수 없습니다. 그것에 대해 exceptions을 사용할 수 있습니다.

function __construct($something = false){ 
    if(is_int($something)) $this->stuff = &getStuff($something); 
    else $this->stuff = $GLOBALS['something']; 

    if (!$this->stuff) { 
     throw new Exception('Foo Not Found'); 
    } 
} 

그리고 당신의 인스턴스화 코드에서

:

try { 
    $foo = new foo(435); 
} catch (Exception $e) { 
    // handle exception 
} 

또한 예외를 확장 할 수 있습니다.

+0

당신은 http://php.net/manual/en/language.exceptions.php를 의미합니까? 하지만 그게 PHP 오류를 표시하고 스크립트를 중지하지 않습니다? 나는 단지 거짓을 돌려주고 싶다 ... – Alex

+0

만약 당신이 그것을 잡으면. 그 시점에서 원하는 모든 것을 할 수 있습니다. – webbiedave

+0

그러면 잘못하고있는 것입니다. 대신에 변수를 할당 한 다음에'if ($ foo-> is_falid()) {/ * do stuff * /}'를 호출하고'die()'함수를 남용하지 말아주세요. –

4

생성자가 아무 것도 반환하지 않아야합니다.

을 사용하여 개체를 만들기 전에 데이터의 유효성을 검사해야한다면 팩터 리 클래스를 사용해야합니다.

편집 : 예, 예외도 트릭을 수행 할 수 있지만 생성자 내부에는 논리가 없어야합니다. 그것은 단위 테스트를위한 고통이됩니다.

+0

팩토리 클래스는 무엇이며 어떻게 사용합니까? : D – Alex

+0

@Alex, [this video] (http://www.youtube.com/watch?v=4F72VULWFvc)에서 볼 수있는 내용 중 일부는 설명 할 수 있습니다 (예, 예는 자바이지만 이론에 대한 이야기입니다 "안녕하세요 세상을 쓰는 법"이 아닙니다.) –

+0

감사합니다. 잠시 후 시청하겠습니다. D – Alex

관련 문제