一个例子:
class MyClass {
private $data = array( /* large amount of data */ );
}
class MyOtherClass {
private $var;
public function __construct($other_class_instance) {
$this->var = $other_class_instance;
}
}
$my_class = new MyClass();
$other_class_1 = new MyOtherClass($my_class);
$other_class_2 = new MyOtherClass($my_class);
上面的代码将是MyClass->data
的内存的约3倍还是仅是1x,因为它是通过引用传递的?
答案 0 :(得分:-1)
不会为$my_class
实例分配新的内存。
MyOtherClass::$var
不包含$my_class
的独立存储器表示,而只是对象标识符引用。
因此每个new MyOtherClass($my_class);
只会添加字节以将特定实例存储在内存中,而不会为$my_class
的副本添加额外的内存。
您可以使用幼稚的方法like this来估计每个新实例所花费的内存量。