这个问题可能很奇怪,但我无法回答任何问题。返回时是否需要将值设置为null
(保存内存)?
...
$output = $DB ->query("SELECT * FROM TABLE WHERE ...", $param);
if (empty($output))
{
throw new Exception('Error');
}
else
{
return $output;
$output = null;
}
或者只是返回$output
?返回后,这个变量会发生什么?还在使用内存吗?
答案 0 :(得分:2)
PHP将释放从函数返回后使用的所有内存。您可以使用memory_get_usage
:
<?php
function bigArray() {
$bigArray = range(1, 1000000);
showMemory('Big array assigned');
}
function showMemory($where) {
echo $where, " - using: ", memory_get_usage(), " bytes", PHP_EOL;
}
showMemory('Start');
bigArray();
showMemory('End');
确切的字节值将根据PHP的确切版本而改变,但对我来说这会产生:
开始 - 使用:340080字节
分配了大数组 - 使用:25510064字节
结束 - 使用:340080字节
如您所见,一旦我们从函数返回,内存就会回到初始值。
答案 1 :(得分:2)
回答您的直接问题:不,您不需要将本地变量设置为null
。内存将自动释放。要看到这一点,请尝试以下方法:
function foo() {
$output = $DB ->query("SELECT * FROM TABLE WHERE ...", $param);
if (empty($output))
{
throw new Exception('Error');
}
else
{
print 'Memory usage:'.memory_get_usage();
$output = null; // Do this before returning!
return $output;
}
}
...
print 'Memory Usage before:'.memory_get_usage();
foo();
print 'Memory Usage after:'.memory_get_usage();
我相信您的关注确实是,&#34;我应该清理资源变量(例如,数据库查询等)吗?这个问题的答案是&#34;是&#34;在这种情况下将变量设置为null是一种很好的做法。
答案 2 :(得分:1)
看看这个:
else
{
return $output; // Code leaves this function or method
$output = null; // So this never runs
}
没有必要,只需返回结果!