2013-02-15 44 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