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

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 复制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引擎中的“写入时复制”优化,这使得具有相同值的单独变量共享相同的内存.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 复制PDO对象是否会创建多个连接?全部内容,希望文章能够帮你解决php – 复制PDO对象是否会创建多个连接?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。