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がメモリを処理する方法を誰かが説明してもらえますか?
前もって感謝します。