【发布时间】:2015-11-14 18:44:49
【问题描述】:
嘿,我有带 PDO 的数据库类和面向对象论坛的其他一些类:
class Database {
private $databaseConnection;
function __construct($path = "", $dbUsername = "", $dbPassword = ""){
$parts = explode('.',$path);
$documentType = array_pop($parts);
if(($path == "") || ((strcmp($documentType, "sq3") !== 0) && (strcmp($documentType, "sqlite") !== 0))) {
throw new Exception("The Database must bee .sq3 or .sqlite and Path must be stated");
}
$this->databaseConnection = new PDO('sqlite:' . $path, $dbUsername, $dbPassword);
$this->databaseConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->databaseConnection->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
self::query('CREATE TABLE...)');
}
function query($sql, $params = NULL){
...
}
function getObjects($objectTable, $searchedForAttribute, $attributeValue){
...
}
function insertObject($object){
...
}
function updateObject($object){
...
}
function removeObject($object){
...
}
...//some other methods
function __destruct(){
unset($this->databaseConnection);
}
}
我应该使用例外吗?比如:
function insertObject($object){
try {
...
}catch(PDOException $e){
throw new Exception($e->getMessage());
}
}
因此,我必须在其他地方捕获此异常并以不同的方式将其发送出去。例如:我有一个类用户和一个表用户。因此,如果填写了新注册,我必须验证新用户的信息。因此,如果一个扩展用户选择了一个已经在数据库中的名称,我会抛出一个异常,尽管我只需要一条消息给用户,说明该名称已经分配。
所以我认为如果我这样做会更好:
function insertObject($object){
try {
...
}catch(PDOException $e){
return "Username already assigned";
}
}
当然,我并不总是知道为什么会抛出异常,但在这种情况下,我会使用 if 块来验证数据。
那么在这种情况下我应该如何使用异常处理呢?
【问题讨论】: