每次实例化类时传入数据库连接对象的任何性能问题


Any performance issues with passing in a db connection object each time I instantiate a class?

我的许多类都需要访问数据库才能完成工作。一段时间以来,我一直在做类似的事情:

// Create a (one) database object
$mysqli = new mysqli("host", "username", "password", "db");
// Pass database object into each new object that requires database interaction as follows
$car = new Car($data, $mysqli);
$plane = new Plane($data, $mysqli);
// etc

然后每个类都有一个私有$mysqli成员,在构造中传递的 mysqli 对象分配给该成员,如下所示:

class Car {
    private $mysqli;
    public function __construct($data, $mysqli) {
        $this->mysqli = $mysqli;
    }
}

然后类方法可以轻松地使用 mysqli 对象,如下所示:

public function fuelLevel() {
    $this->mysqli->query("SELECT fuel_level FROM fuel_tank");
}

我的问题是,如果要创建几千个这样的对象,我会遇到任何性能问题吗?我是否正确认为这样做在我的整个应用程序中只有一个数据库连接?或者我应该使用如下所示的引用(指针?)来避免担心的性能开销?

$car = new Car($data, &$mysqli);
$plane = new Plane($data, &$mysqli);

不,这不可能造成任何可衡量的性能影响。你是对的,有一个连接对象是通过引用传递的。在 PHP 中开发时,这种级别的优化不是您应该关注的事情。

你绝对不应该使用调用时传递引用(new Car($data, &$mysqli)),它在 PHP 5.3 中被弃用。