4

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() に対して同じ値を表示します。

なんで?

4

1 に答える 1