好的,我有一个错误类,你可以在那里$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();
然后你可以将错误添加到此,但是如何输出错误呢,如果任何?
答案 0 :(得分:1)
也许这是一个愚蠢的建议,但你为什么不使用Exceptions
?
关于Exceptions
的美妙之处在于它们绕过了正常的代码流,因此您不必担心返回值等。
答案 1 :(得分:1)
您只需将错误类全球化,以便函数可以使用它。在fetch函数中,在第一行,只需将$error
定义为全局,如下所示:
public function fetch($album){
global $error;
$columns = "id, title, uID, date";
虽然$error
不是某个地方全球化的最大变量名。此外,您需要将函数内的$errors->add()
行更改为$error->add()
。这应该有效,但我不强烈建议这样做。