在最近有趣的项目(管理账单和客户的系统)中,我决定使用PDO作为数据库接口。我遇到了这个问题,我在使用预准备语句(准备,设置参数,执行等)时不断编写相同的代码,所以我决定写一个小帮助器类,其中包含更快使用的方法(select,selectRow,等)。
我知道这不是最优的,并且PDO本身已经“足够好”(我已经阅读了一些关于PDO帮助程序类的其他问题),但我的问题更多地涉及使用(静态)帮助程序时的一般设计类!
这是我的第一个方法的一些代码
class DBA {
private $con;
public function __construct () {
$this->con = new PDO ( .. );
}
public function select ($query, $params = array()) {
$sth = $this->con->prepare($query);
....
}
// returns an object
public function fetchObject ($query, $params = array(), $class) {
$sth = $this -> con -> prepare($query);
$sth -> setFetchMode(PDO::FETCH_CLASS, $class);
..
}
...
}
class Bill {
public $date;
public $payed;
// ...
public function markAsPayed () {
$dba = new DBA();
if($dba -> exec ('UPDATE ..', $args)) {
return true,
}
return false;
}
}
// index.php
$dba = new DBA ();
$bill = $dba -> fetchObject ('SELECT ..', $args, 'Bill');
$bill -> markAsPayed();
我发现了以下问题:我在其他类中使用该类创建它的实例(例如,在我从数据库中的行中获取的对象中)。所以helper类会有很多实例(这意味着大量的连接),因为我在其他类的每个方法中都创建了一个实例,它使用了helper类。当我调用使用辅助类的方法时,对辅助类创建的对象,整个应用程序变得非常慢。
将辅助类静态化是一个很好的解决方案吗?如果是这样,我如何连接到数据库?我应该使用单身模式吗?我不想在helper类的每个方法中重新连接到数据库,但在helper类中有一个全局连接。