通过引用传递是否避免创建新变量?

Jer*_*ris 5 php oop

如果我通过引用将变量或对象传递给函数调用,我会想象它避免在内存中创建第二个对象,从而保留资源?例如:

<?php

class CoolObject
{
    // Have some properties here

    public function __construct()
    {
       // Do some stuff
    }

    public function test()
    {
       echo("Test");
    }
}

function doSomething(&$param)
{
   // Calls original instance, still only one object in memory
   $param->test();

   // Does this create a second instance in memory, or just assign
   // the reference?
   $newObj = $param;
}

// Create 1st instance of object in memory
$myObj = new CoolObject;

// Do a test to determine number of instances created
doSomething($myObj);

?>
Run Code Online (Sandbox Code Playgroud)

当我将"by reference"变量分配给$ newObj时,它是否在内存中创建了一个新的数据,将计数最多为2,或者只是传递了引用仍然只留下一个对象?

Mar*_*ams 3

如果您通过引用传递变量,那么您是正确的,因为它不会复制该对象。相反,它复制指向该对象的指针。因此,虽然它使用了一些内存,但内存量仅等于指针的大小。

当您创建另一个指向同一对象的变量时,您将再次复制指针,其结果与上面相同。

就引用计数和对象而言,每次复制指针时,引用计数器都会递增。

只有当引用计数为零时,对象才会被释放。