2013-02-15 81 views
4

據我所知,構造函數不返回值。我在下面面臨的問題是,我不得不在每個子類的方法中重複調用check_error()來查看父類$error數組是否存在任何錯誤。在構造函數中返回值以避免代碼中的重複使用

是否有任何機會改變我的代碼來刪除複製,使其更加用戶友好和可維護?

感謝

class RestfulRequest extends Restful 
{ 
    public function __construct() 
    { 
    parent::__construct(); 

    if (is_array($this->error)) 
    { 
     return 'Error found'; 
    } 
    } 
.. 
.. 
.. 
} 

我知道上面的代碼是不可能的,但我只是將告訴你,我需要在首位的。無需重複,只需在每次啓動中檢查一次。

abstract class Restful 
{ 
    public $error = array('error1', 'error2'); 
    abstract public function check_error(); 
    abstract public function method_one(); 
    abstract public function method_two(); 
} 

class RestfulRequest extends Restful 
{ 
    public function __construct() 
    { 
    parent::__construct(); 
    } 

    public function check_error() 
    { 
    return (is_array($this->error)) ? false : true; 
    } 

    public function method_one() 
    { 
    if ($this->check_error() === false) 
    { 
     return 'Error found'; 
    } 

    return 'No error'; 
    } 

    public function method_two() 
    { 
    if ($this->check_error() === false) 
    { 
     return 'Error found'; 
    } 

    return 'No error'; 
    } 
} 

$obj_restful = new RestfulRequest(); 
echo $obj_restful->method_one(); 
echo $obj_restful->method_two(); 
+1

拋出異常。 – 2013-02-15 14:15:06

回答

2

構造函數不能返回值,但它們可以拋出異常。

Class RestfulRequest extends Restful 
{ 
    public function __construct() 
    { 
    parent::__construct(); 

    if (is_array($this->error)) 
    { 
     throw new Exception('Error found.'); 
    } 
    } 
.. 
.. 
.. 
} 
+0

問題:如果在構造函數中發現錯誤,會立即忽略(取消)'$ obj_restful-> method_one();'和'$ obj_restful-> method_two(); – BentCoder 2013-02-15 14:35:09

+0

這很大程度上取決於您如何處理異常。 – BenM 2013-02-15 14:40:08