2011-08-23 21 views
0

好吧,我有一个错误类,在那里你可以做$error->add($message);这将存储$消息到类中的数组。如何使用类内部的错误类

private $_errorArray = array(); 

    public function add($message){ 
     $this->_errorArray[] = $message; 
    } 
    public function output(){ 
     return $this->_errorArray; 
    } 
    public function exists(){ 
     if(empty($this->_errorArray)){ 
      return false; 
     }else{ 
      return true; 
     } 
    } 
} 

现在如果我有一个类AlbumMapper,那抓取和分配变量。但如果它不能抓取(没有行选择),那么它应该添加一条消息到这个错误。

class AlbumMapper { 
    private $_pdo; 

    function __construct($pdo){ 
     $this->_pdo = $pdo; 
    } 
    public function fetch($album){ 
     $columns = "id, title, uID, date"; 
     $table = TABLE_USERS_ALBUMS; 
     $query = "SELECT ".$columns." FROM ".$table." WHERE id=:id"; 
     $query = $this->_pdo->prepare($query); 
     $query->bindValue(":id", $album->id()); 
     $query->execute(); 

     if(! $data = $query->fetch()) { $errors->add("Album not exists"); } 

     $album->assign($data); 
    } 
} 

而且,我想输出错误OUTSIDE类。 所以:

$error = new errors(); 
$albumMapper->fetch($album); 
if ($error->exists()) { $error->output(); } 

我可以做这个工作,如果我通过了$错误的fetch()方法,但后来我需要在$错误传递给我的方法,而它不觉得最好方法来做到这一点。

我也可以通过在对象$ albumMapper中创建对象来实现,因此在构造函数中它会:$error = new errors();,然后您可以将错误添加到此,但是如果有错误,那么我将如何输出错误?

回答

1

也许这是一个愚蠢的建议,但为什么不使用Exceptions

关于Exceptions的美妙之处在于它们绕过了正常的代码流程,因此您不必担心返回值等问题。

+0

是否有异常不显示为真正的错误,就像网站有什么问题?我想输出简单的“没有相册存在”不是“例外已被捕获:错误...在线...”..如果你可以这样做,请示例 – Karem

+0

使用'try-catch'。我相信你可以找到很多例子。 – Halcyon

1

您只需要全局化错误类,以便函数可以使用它。里面你取功能,在第一行,只是定义$error全球,像这样:

public function fetch($album){ 
    global $error; 
    $columns = "id, title, uID, date"; 

虽然$error不是某处全球化最大的变量名。功能内的$errors->add()行也需要更改为$error->add()。这应该工作,但我不强烈建议这样做。

+0

我不想使用全局,我最近有recode洞我的项目不是分开的全局变量.. – Karem