我在使用php 5.3脚本时对内存分配存有疑问。 想象一下你有这样的两个静态类(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(静态变量的副本),因此第二次调用较少“占用内存”。
但是,如果运行test.php脚本,memory_get_usage将显示Test::getTestData1()和Test::getTestData2()的相同值。
为什么?