2012-01-11 165 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'); 

但是,當我的var_dump($ X),我得到了相同的結果。我想做一個:

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

參考線 - http://stackoverflow.com/questions/2214724/php-constructor- to-return-a-null – adatapost 2012-01-11 01:26:17

回答

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

好的。每次創建新對象時嘗試和捕捉我最適合我,還是我可以在課堂上做一次並讓它處理它? (哪個更好?)? – execv 2012-01-11 01:43:09

+0

2附加問題:1.我應該嘗試/捕捉每種方法嗎? (例如:try {$ user-> getEmail();} catch(..){..}。2.我應該在驗證表單數據時嘗試/ catch(即:$ data ['name'] =''; $ user-> updateName($ data); //如果方法發現名稱爲空,它應該只是返回一條消息,還是應該拋出一個異常?) – execv 2012-01-11 01:45:34

+0

@Nathan你不應該抓住任何和所有的異常因爲它們可能被拋出,例外是,正如名字所說,*特殊情況*哪些*永遠不會發生*如果它們確實發生,那是因爲你的應用程序出現錯誤,這就是爲什麼你聲明瞭一個*異常情況*不要將例外用於正常的「可能或不可能發生」的情況,大多數例外都應該特別*不能被捕獲,特別是在這樣的微不足道的情況下。 – deceze 2012-01-11 01:48:10

6

你不能return任何東西從構造函數。如果你想建造一個物體失敗,你必須throwException