0

データベース操作を処理するクラスを構築しているので、PDOを使用することにしました。

最初は、静的メソッドを使用して呼び出しを単純化することにしました。属性は変更されず、メソッドは独立しているため、オブジェクトの参照を保存する必要がないためです。ただし、このソリューションでは、そのようなクラスのメソッドを呼び出すたびに新しいPDOオブジェクトをインスタンス化し、データベースに接続してから、クエリを準備して実行する必要があります。

以下は、このクラスのインサートmnethodのベースの例です。

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();
     ....
}

注意:このような静的メソッドと変数を使用するコードは、モックpdoオブジェクトでは完全にテストできなくなります...現時点では、グローバル変数よりもはるかに優れているわけではないため、依存関係の注入が推奨されます。

于 2012-12-12T15:59:31.263 に答える