2017-09-27 178 views
0

這個問題可能很奇怪,但我無法回答任何地方。返回(節省內存)時是否需要設置值爲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

不,那行代碼甚至不會被執行,因爲它來了返回後 –

回答

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(); 

我相信你的關心是真的?「我應該清理資源變量(例如,數據庫查詢等)的問題的答案爲‘是’並且在這種情況下將變量設置爲空是很好的做法

1

看看這個:

else 
    { 
     return $output; // Code leaves this function or method 
     $output = null; // So this never runs 
    } 

有沒有需要它,只是返回你的結果!

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