返回时PHP将值设置为null

时间:2017-09-27 11:37:05

标签: php variables return-value

这个问题可能很奇怪,但我无法回答任何问题。返回时是否需要将值设置为null(保存内存)?

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

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

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

3 个答案:

答案 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字节

如您所见,一旦我们从函数返回,内存就会回到初始值。

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

答案 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
  }

没有必要,只需返回结果!