PHP设置值为空时返回

问题描述:

这个问题可能很奇怪,但我无法回答任何地方。返回(节省内存)时是否需要设置值为nullPHP设置值为空时返回

 ... 
     $output = $DB ->query("SELECT * FROM TABLE WHERE ...", $param); 

     if (empty($output)) 
     { 
      throw new Exception('Error'); 
     } 
     else 
     { 
      return $output; 
      $output = null; 
     } 

或者只是返回$output?这个变量在返回后会发生什么?仍然使用内存?

+1

你不能在返回后执行代码 – iCoders

+1

返回后的代码永远不会执行 –

+0

不,那行代码甚至不会被执行,因为它来了返回后 –

要回答你的问题直接:不,你不需要局部变量设置为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个字节

正如你所看到的,一旦我们从函数返回,内存就会回到初始值。

例子:https://eval.in/869171