<?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 的构造中使用 传值 和 传引用的 不同内存使用率。 并求解。
<?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. 所谓引用,就是说将对象在内存中的地址传递给目标对象,就相当于使目标对象和原始对象对应同一个内存存储空间。此时,如果对目标对象进行修改,内存中的数据也会改变。
3. 一般传值省内存,当需要对大数据进行操作的时候,传址节省内存,当需要函数多返回值的时候也可以引用传参。
#5所示的是php内部实现的机制,更一般的理解是:php在维护一张变量表,每个变量或对象(特殊的变量)都是这个表中的一个元素
传值,就是复制表中指定的元素到新的位置
传引用,就是将该变量在表中的位置传递给使用者