我正在构建一个处理数据库操作的类,我决定使用PDO。
起初我决定使用静态方法来简化调用,因为属性不会改变且方法是独立的,所以我不需要保存对象的引用。但是,使用此解决方案,我必须为此类的某些方法的每次调用实例化一个新的PDO对象,连接到数据库,然后准备thge查询并执行。
Bellow是此类的插入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:我知道有些人讨厌静态方法,因为它们很难进行单元测试,但在某些情况下它们非常方便。答案 0 :(得分: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对象变得完全不可测试......在这一点上它们并不比全局变量好得多,依赖于Dependancy Injection。