Php 复制PDO对象是否会创建多个连接?
我有一个关于使用PDO的问题,我还没有找到答案。这可能对mysql/mysqli连接也适用 在我的项目的主要部分中,我使用Php 复制PDO对象是否会创建多个连接?,php,mysql,pdo,Php,Mysql,Pdo,我有一个关于使用PDO的问题,我还没有找到答案。这可能对mysql/mysqli连接也适用 在我的项目的主要部分中,我使用 $pdo = new PDO('connection here'); 我有一个类需要访问数据库。因此,我没有在每个函数中使用“global$pdo;”,而是执行了以下操作 class MyClass(){ private $db = null; __construct(){ global $pdo; $this->db
$pdo = new PDO('connection here');
我有一个类需要访问数据库。因此,我没有在每个函数中使用“global$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.
}
到
谢谢 正如deceze在注释中提到的,在这段代码中,您实际上并没有复制PDO对象,您只是分配了一个额外的变量来引用同一个对象 详细解释,但概括地说,对象具有额外的间接级别-即使不通过引用传递,也只是复制指向对象的指针,而不是对象本身 只有当您确实想要修改变量并使修改传回时,才需要通过引用传递;在函数中为
$pdo
分配一个全新的对象将被视为修改变量,但操作对象则不会
与直觉相反,通过引用赋值通常会降低性能,因为它会破坏PHP引擎中的“写时复制”优化,该优化允许具有相同值的单独变量共享相同内存。它不会创建两个连接。要确认,您可以使用: xdebug_debug_zval.检查php手册的用法。 您可以使用以下代码的helkp检查结果:
xdebug_debug_zval('pdo');和xdebug_debug_zval('db') 刚才回答了这个问题:。答案应该会消除你的困惑。这是同一个对象,因为对象总是与引用一起存储在旁注上,从老式mysql_connect()返回的连接是否符合这些规则?@GameCharmer返回称为“资源”的东西,这是另一种奇怪的变量;但是,与对象一样,变量的“值”只是资源的ID,因此赋值的工作方式与对象类似。
function MyFunction($member_id, &$pdo){
//do something
}