ホームページ > バックエンド開発 > PHPチュートリアル > PHP unset() 関数が変数を破棄する_PHP チュートリアル

PHP unset() 関数が変数を破棄する_PHP チュートリアル

WBOY
リリース: 2016-07-15 13:34:39
オリジナル
1171 人が閲覧しました

私たちは学習中です

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

tru​​ehttp://www.bkjia.com/PHPjc/445987.html技術記事 PHP の unset() 関数は変数を破棄するために使用されることを学習していますが、多くの場合、この関数は変数を破棄するだけで、メモリに格納されている変数の値はまだ破棄されていません。 .
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート