<?php
class obj
{
public $data = array();

function __construct()
{
$this->data = range(1,10000);
}
}class ref
{
public $obj = null;

function __construct(&$obj = null)
{
$this->obj = $obj;
}

}$obj = new obj();
$ref = new ref($obj);
echo memory_get_usage();大家试试 ref($obj) ref 的构造中使用 传值 和 传引用的 不同内存使用率。 并求解。

解决方案 »

  1.   


    <?php
    class obj
    {
    public $data = array();

    function __construct()
    {
    $this->data = range(1,10000);
    }
    }class ref
    {
    public $obj = null;

    function __construct($obj = null) //这里用引用和不加引用 看到内存变化  但是 把下面 注销的那句开启 内存却不变化?
    {
    $this->obj = $obj;
    }

    }//$obj = new obj();
    $obj = 111;
    $ref = new ref($obj);
    echo memory_get_usage();?>
      

  2.   

    1.  所谓值传递,就是说仅将对象的值传递给目标对象,就相当于copy;系统将为目标对象重新开辟一个完全相同的内存空间。
    2.   所谓引用,就是说将对象在内存中的地址传递给目标对象,就相当于使目标对象和原始对象对应同一个内存存储空间。此时,如果对目标对象进行修改,内存中的数据也会改变。
    3.  一般传值省内存,当需要对大数据进行操作的时候,传址节省内存,当需要函数多返回值的时候也可以引用传参。
      

  3.   

    &引用新建内存,把数据复制进去,传值是把内存空间指向原内存空间了,当然省。
      

  4.   

    如果你能将下面的文章内容吃透,你就明白是怎么回事了!深入理解PHP原理之变量分离/引用(Variables Separation)
      

  5.   

    从 php5 开始,由于引入例如较强的面向对像的概念。所有对象的传递都采用了‘引用’的方式
    #5所示的是php内部实现的机制,更一般的理解是:php在维护一张变量表,每个变量或对象(特殊的变量)都是这个表中的一个元素
    传值,就是复制表中指定的元素到新的位置
    传引用,就是将该变量在表中的位置传递给使用者