私たちは学習中です
PHP unset() 関数は変数を破棄するために使用されますが、多くの場合、この関数は変数を破棄するだけで、メモリに格納されている変数の値はまだ破棄されていません。メモリを解放するという望ましい効果を達成できません。ここでは、$variable=null メソッドを使用してメモリを解放することをお勧めします。その理由は以下を読むとわかります。
以下は、PHP unset() 関数に関するいくつかの重要なポイントです: (以下はすべて Windows 環境、PHP 2.5.9 でテストされています)
1. この関数は、変数値が占有するスペースが超過する場合にのみ使用されます。 256バイト長です
2. 値を指す変数(値を指す参照変数など)が全て破壊された場合のみ、アドレスが解放されます(1の判定も必要です)
コードの引数の例を以下に示します。
<ol class="dp-xml"><li class="alt"><span><span class="tag"><</span><span> ?php </span></span></li><li><span>$</span><span class="attribute">test</span><span>=</span><span class="attribute-value">str_repeat</span><span>("1",256); </span></li><li class="alt"><span>$</span><span class="attribute">s</span><span> = </span><span class="attribute-value">memory_get_usage</span><span>(); </span></li><li><span>//改函数用来查看当前所用内存 </span></li><li class="alt"><span>unset($test); </span></li><li><span>$</span><span class="attribute">e</span><span> = </span><span class="attribute-value">memory_get_usage</span><span>(); </span></li><li class="alt"><span>echo ' 释放内存: '.($s-$e); </span></li><li><span>//输出为272,但如果上面test变量改为<br />$</span><span class="attribute">test</span><span>=</span><span class="attribute-value">str_repeat</span><span>("1",255),输出则为0 </span></li><li class="alt"><span class="tag">?></span><span> </span></span></li></ol>
なぜ 256 ではなく 272 なのかについては、内部でどのように処理されるのかはよくわかりません。
<ol class="dp-xml"><li class="alt"><span><span class="tag"><</span><span> ?php </span></span></li><li><span>$</span><span class="attribute">test</span><span> = </span><span class="attribute-value">str_repeat</span><span>("1",256); </span></li><li class="alt"><span>$</span><span class="attribute">p</span><span> = &$test; </span></li><li><span>unset($test); </span></li><li class="alt"><span>echo $p; </span></li><li><span>//输出为256个1。如果上面改为unset($p)<br />,更不行了,echo $test 直接显示为256个1 </span></li><li class="alt"><span class="tag">?></span><span> </span></span></li></ol>
つまり、$a に代入された値はメモリ内にまだ存在します。 unset() ではメモリを解放する効果が得られないことがわかります。
ただし、上記のコードに $test=null を追加するか、unset($p) を追加すると、メモリを解放する効果を得ることができます。PHP unset() 関数のテスト コードは次のとおりです。 null メソッド:
<ol class="dp-xml"><li class="alt"><span><span class="tag"><</span><span> ?php </span></span></li><li><span>$</span><span class="attribute">test</span><span> = </span><span class="attribute-value">str_repeat</span><span>("1",256); </span></li><li class="alt"><span>$</span><span class="attribute">p</span><span> = &$test; </span></li><li><span>$</span><span class="attribute">s</span><span> = </span><span class="attribute-value">memory_get_usage</span><span>(); </span></li><li class="alt"><span>$</span><span class="attribute">test</span><span> = </span><span class="attribute-value">null</span><span>; </span></li><li><span>unset($test); </span></li><li class="alt"><span>$</span><span class="attribute">e</span><span> = </span><span class="attribute-value">memory_get_usage</span><span>(); </span></li><li><span>echo ' 释放内存: '.($s-$e); </span></li><li><span>//输出为272 </span></li><li class="alt"><span>var_dump($p); //输出为NULL </span></li><li><span class="tag">?></span><span> </span></span></li></ol>
アドレス内の値を指すすべての変数を破棄するメソッド:
<ol class="dp-xml"><li class="alt"><span><span class="tag"><</span><span> ?php </span></span></li><li><span>$</span><span class="attribute">test</span><span> = </span><span class="attribute-value">str_repeat</span><span>("1",256); </span></li><li class="alt"><span>$</span><span class="attribute">p</span><span> = &$test; </span></li><li><span>$</span><span class="attribute">s</span><span> = </span><span class="attribute-value">memory_get_usage</span><span>(); </span></li><li class="alt"><span>//注意,以下2个unset()顺序对调没<br />有关系,不影响结果 </span></li><li><span>unset($p); </span></li><li class="alt"><span>unset($test); </span></li><li><span>$</span><span class="attribute">e</span><span> = </span><span class="attribute-value">memory_get_usage</span><span>(); </span></li><li class="alt"><span>echo ' 释放内存: '.($s-$e); //输出为272 </span></li><li><span class="tag">?></span><span> </span></span></li></ol>
これで、PHP unset() 関数のデモは終了です。
http://www.bkjia.com/PHPjc/445987.html