0

我正在构建一个类来处理数据库操作,我决定使用 PDO。

起初我决定使用静态方法来简化调用,因为属性不改变,方法是独立的,所以我不需要保存对象的引用。但是,使用此解决方案,我必须为此类类的某些方法的每次调用实例化一个新的 PDO 对象,连接到数据库,然后准备查询并执行。

Bellow 是此类的插入方法的基础示例:

public static function insert($table, $columns, $values){
    $dbConnection = new PDO('mysql:dbname='.self::$db.'; host='.self::$host.'; charset=utf8', self::$login, self::$pass);

    ... create the sql query and the associative array of values

    $stmt = $dbConnection->prepare($sql);
    $stmt->execute($array_aux);
}

所以我想知道在每次调用中实例化 PDO 对象是否效率太低,如果我最好存储 PDO 引用,那么不要使用静态方法。

ps:我知道有些人讨厌静态方法,因为它们很难进行单元测试,但在某些情况下它们非常方便。

4

1 回答 1

1

举一个@nikita2206建议的例子:

private $pdo = null;
private static function getDB(){
    if(is_null(self::$pdo)) self::$pdo = new PDO(...);
    return self::$pdo;
}
public static function insert($table, $columns, $values){
     $dbConnection  = self::getDB();
     ....
}

请注意:您的代码,使用像这样的静态方法和变量完全无法使用 mock-pdo 对象进行测试......此时它们并不比全局变量好多少,依赖注入将是首选。

于 2012-12-12T15:59:31.263 回答