如何使用类中的错误类

时间:2011-08-23 19:59:02

标签: php class object

好的,我有一个错误类,你可以在那里$error->add($message);将$ 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(); }

我可以使这个工作,如果我将$ error传递给fetch()方法,但是我需要将$ error传递给我的所有方法,并且它不会感觉最好的方法。

我也可以通过在对象$ albumMapper中创建对象来实现这一点,所以在构造函数中它执行:$error = new errors();然后你可以将错误添加到此,但是如何输出错误呢,如果任何?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

您只需将错误类全球化,以便函数可以使用它。在fetch函数中,在第一行,只需将$error定义为全局,如下所示:

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

虽然$error不是某个地方全球化的最大变量名。此外,您需要将函数内的$errors->add()行更改为$error->add()。这应该有效,但我不强烈建议这样做。