2017-09-27 13 views
0

この質問はおそらく奇妙ですが、私はどこにでも答えることができません。返却するときに値をnullに設定する必要がありますか?返信時にPHPが値をnullに設定しました

 ... 
     $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

いいえ、そのコード行は実行されませんreturnの後に –

答えて

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

は、 『はい「?私は(例えば、DBクエリ、)リソース変数をクリーンアップする必要がありますがその質問への答えは』

1

ルック:

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

それのための必要はちょうどあなたの結果を返す、ありません!

2

PHPは、関数から戻ると使用されたメモリを解放します。正確なバイト値はPHPの上の正確なバージョンを変わります

<?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'); 

、私にとって、これは生成します:あなたはmemory_get_usageを使用して、この自分自身をテストすることができ

スタート - 使用:340080バイト

を割り当てられた

ビッグ配列 - 使用:25510064バイト

エンド - 使用:340080バイト

ご覧のとおり、関数から復帰すると、メモリは初期値に戻ります。

例:https://eval.in/869171

関連する問題