PHP(静态?)数据库助手类

时间:2014-07-03 00:35:05

标签: php mysql pdo static

在最近有趣的项目(管理账单和客户的系统)中,我决定使用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类中有一个全局连接。

0 个答案:

没有答案