【问题标题】:Any performance issues with passing in a db connection object each time I instantiate a class?每次实例化一个类时传入一个数据库连接对象有什么性能问题吗?
【发布时间】:2012-06-29 14:14:33
【问题描述】:

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

// 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 object reference scope


    【解决方案1】:

    不,这不可能造成任何可衡量的性能影响。您是对的,您通过引用传递了一个连接对象。在 PHP 中进行开发时,您不必关心这种优化级别。

    您绝对不应使用在 PHP 5.3 中已弃用的调用时传递引用 (new Car($data, &$mysqli))。

    【讨论】:

    • 也许我只是对其他语言感到困惑,我认为在语言(例如 C#)中,当您将变量传递给类或函数时,会创建所述变量的副本(使用少量内存)。根据我上次的 sn-p,我将在哪里使用引用/指针,因为 mysqli 对象的状态永远不会改变?我可能只是感到困惑,如果这没有什么意义,对不起。
    • 不适用于 PHP。当你将一个对象传递给一个函数时,你总是通过引用传递它。也就是说,“少量内存”就是:少量内存。这不是您在使用 PHP(一种解释性语言)进行开发时应该花时间考虑的事情。服务器端性能是您在开发网站时最不应该担心的事情。
    • 感谢 meagar,感谢您的帮助。当我被允许时,将在 7 分钟内标记为正确。
    猜你喜欢
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    相关资源
    最近更新 更多