PHP 5.3スクリプトでのメモリ割り当てに疑問があります。次のような 2 つの静的クラス (MyData と Test) があるとします。
class MyData {
private static $data = null;
public static function getData() {
if(self::$data == null)
self::$data = array(1,2,3,4,5,);
return self::$data;
}
}
class Test {
private static $test_data = null;
public static function getTestData1() {
if(self::$test_data==null) {
self::$test_data = MyData::getData();
self::$test_data[] = 6;
}
return self::$test_data;
}
public static function getTestData2() {
$test = MyData::getData();
$test[] = 6;
return $test;
}
}
そして簡単な test.php スクリプト:
for($i = 0; $i < 200000; $i++) {
echo "Pre-data1 Test:\n\t" . memory_get_usage(true) . "\n";
Test::getTestData1();
echo "Post-data1 Test:\n\t" . memory_get_usage(true) . "\n";
}
for($i = 0; $i < 200000; $i++) {
echo "Pre-data2 Test:\n\t" . memory_get_usage(true) . "\n";
Test::getTestData2();
echo "Post-data2 Test:\n\t" . memory_get_usage(true) . "\n";
}
Test::getTestData1() の呼び出しは 2 つの静的変数にメモリを割り当て、Test::getTestData2() は関数の戻り時に $test (静的変数のコピー) を破棄するため、2 回目の呼び出しは少なくなると思います。 「メモリが高価」。
しかし、test.php スクリプトを実行すると、memory_get_usage は Test::getTestData1() と Test::getTestData2() に対して同じ値を表示します。
なんで?