我编写了这段代码来测试 PHP 中某些对象的大小
<?php
class MyClass
{
public $string1="first string";
public $string2="second string";
public $string3="third string";
public function __toString() {
return $this->string;
}
}
function mem() {
return memory_get_usage(false);
}
$before = mem();
$class = new MyClass;
var_dump("new object size: ".(mem() -$before));
$before=mem();
$string = "test";
var_dump("string size: ".(mem() -$before));
$before=mem();
$objcopy = $class;
var_dump("object copy size: ".(mem() -$before));
$before=mem();
$objref = &$class;
var_dump("object reference size: ".(mem() -$before));
这是我系统中的输出:
string(20) "new object size: 188"
string(15) "string size: 80"
string(20) "object copy size: 44"
string(25) "object reference size: 72"
我现在很困惑,为什么我们有: $class>$string>$objref>$objcopy
不应该是: $class=$objcopy>$string>$objref 吗?
$objcopy 实际上包含 3 个字符串,而不是 $string 是一个..
有人可以解释一下php如何用这种对象处理内存吗?
提前致谢。