PHP设置值为空时返回
问题描述:
这个问题可能很奇怪,但我无法回答任何地方。返回(节省内存)时是否需要设置值为null
?PHP设置值为空时返回
...
$output = $DB ->query("SELECT * FROM TABLE WHERE ...", $param);
if (empty($output))
{
throw new Exception('Error');
}
else
{
return $output;
$output = null;
}
或者只是返回$output
?这个变量在返回后会发生什么?仍然使用内存?
答
要回答你的问题直接:不,你不需要局部变量设置为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();
我相信你的关心是真的?“我应该清理资源变量(例如,数据库查询等)的问题的答案为‘是’并且在这种情况下将变量设置为空是很好的做法
答
看看这个:
else
{
return $output; // Code leaves this function or method
$output = null; // So this never runs
}
有没有需要它,只是返回你的结果!
答
一旦你从函数返回,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个字节
正如你所看到的,一旦我们从函数返回,内存就会回到初始值。
你不能在返回后执行代码 – iCoders
返回后的代码永远不会执行 –
不,那行代码甚至不会被执行,因为它来了返回后 –