加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – 复制PDO对象是否会创建多个连接?

发布时间:2021-08-28 03:47:24 所属栏目:大数据 来源: https://www.jb51.cc
导读:我有一个关于使用PDO的问题,我无法找到答案.对于mysql / mysqli连接,这可能也是一样的. 在我的项目的主要包括中,我使用创建一个PDO对象 $pdo = new PDO('connection here'); 好吧,我有一个需要访问数据库的类.所以,而不是使用“全球$pdo;”在每个功能的内部,

我有一个关于使用PDO的问题,我无法找到答案.对于mysql / mysqli连接,这可能也是一样的.

在我的项目的主要包括中,我使用创建一个PDO对象

$pdo = new PDO('connection here');

好吧,我有一个需要访问数据库的类.所以,而不是使用“全球$pdo;”在每个功能的内部,我做了以下.

class MyClass(){
    private $db = null;
    __construct(){
        global $pdo;
        $this->db = $pdo;
    }
    function example(){
        $sql = 'A Query';
        $this->db->prepare($sql);
    }
 }

无论如何,我的问题是,这样做是否创建了2个与数据库的连接,因为我通过设置类’$db var等于它来实际复制$pdo?我问的主要原因是因为我发现在我们的系统中发生了很多这种情况,我担心与MysqL建立太多连接并因为不必要的连接而导致系统崩溃.

作为第二部分,以下是否导致重复,我可以通过ref?我有点害怕尝试它并导致某些事情破裂.

更改

function MyFunction($member_id, $pdo){
    //do something.
}

function MyFunction($member_id, &$pdo){
   //do something
}

谢谢!

解决方法:

正如评论中的deceze所提到的,你实际上并没有在这段代码中复制PDO对象,你只需要分配一个额外的变量来引用同一个对象.

This answer详细解释,但总而言之,对象具有额外的间接级别 – 即使您没有通过引用传递,您仍然只是复制指向对象的指针,而不是对象本身.

只有在您真正想要修改变量并将修改传播回来时,才需要通过引用传递;在函数内部为$pdo分配一个全新的对象将被视为修改变量,但操纵该对象则不会.

反直觉地,通过引用分配通常会对性能造成更糟糕的影响,因为它会破坏PHP引擎中的“写入时复制”优化,这使得具有相同值的单独变量共享相同的内存.

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读