ホームページ >バックエンド開発 >PHPチュートリアル >PHP グローバル変数の設定解除の問題の詳細な分析_PHP チュートリアル

PHP グローバル変数の設定解除の問題の詳細な分析_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:05:48789ブラウズ

PHP の未設定グローバル変数は、実際に使用されているローカル変数を破壊することしかできず、グローバル変数の目的を達成することはできません。以下でこの問題を詳しく解決してみましょう。お役に立てれば幸いです。

PHP 言語の一部の関数は初心者にとって文字通り理解するのが難しいため、この知識を習得するには実際のコーディングの経験をまとめる必要があります。今日紹介したいのは、PHP の unset グローバル変数の使用時に遭遇するいくつかの問題です。

PHPにはunsetという変数を解放するステートメントがあります(PHP4からunsetは関数ではなくステートメントになりました)数日前にunsetを使用した際に問題があったので、unsetの問題を以下にまとめました。 。 PHP マニュアルをよく読んでいる場合は、この記事を読む必要はありません。この記事は、マニュアルに注意を払わない学生向けです。

最初に強調すべきことは、PHP unset グローバル変数は PHP では関数ではないため、戻り値がなく、使用時に unset の戻り値を判断に使用することはできません。 。

次に、関数内で PHP の unset グローバル変数はローカル変数のみを破壊できますが、グローバル変数は破壊できません

コードをコピーします コードは次のとおりです。
< ?PHP
関数 destroy_foo() {
global $foo;
unset($foo);
}
$foo = 'bar';
destroy_foo();
echo $foo;
?>返される結果は
bar です
なぜこれが起こっているのでしょうか?その理由は、PHP の unset グローバル変数は関数内のローカル変数のみを破壊できるためです。プログラム内のグローバル変数を破棄する必要がある場合はどうすればよいでしょうか? $GLOBALS 配列を使用して実装するのも非常に簡単です。以下の例を見てください:


コードをコピーします

コードは次のとおりです:
< ?PHP function foo() { unset($GLOBALS['bar']);
}
$ bar = "something" ;
foo();
var_dump($bar);
?>


PHP unset() 関数は変数を破棄するために使用されますが、実際の実行中にメモリ内のデータを解放できないことがよくあります。手術。この記事では、関連する問題の解決策を詳しく説明します。

PHP言語を学ぶとき、各関数の使い方は通常曖昧で、一つ一つ習得するのは困難です。しかし、私たちはこれらの機能をマスターする必要があります。ここではPHPのunset()関数の使い方を詳しく紹介します。
PHP unset() 関数は変数を破棄するために使用されますが、多くの場合、この関数は変数を破棄するだけで、メモリに格納されている変数の値はまだ破棄されていません。これは、必要なメモリ解放が達成されていないことを意味します。 。 効果。ここでは、$variable=null メソッドを使用してメモリを解放することをお勧めします。その理由は以下を読むとわかります。



以下は、PHP unset() 関数に関する重要なポイントです: (以下はすべて Windows 環境、PHP 2.5.9 でテストされています)


この関数は、変数値が 256 バイトを超えている場合にのみ機能します。 long メモリを解放します値を指す変数(値を指す参照変数など)が全て破壊された場合のみアドレスを解放します(1の判定も行う必要があります)サンプルコード引数を与えます以下:

コードをコピーします

コードは次のとおりです:
< ?php $test=str_repeat("1",256); // 文字列を繰り返し、戻り値は繰り返した文字列です。 $s =memory_get_usage ();
//この関数は現在使用されているメモリを表示するために使用されます
unset($test);
$e =memory_get_usage();
echo ' メモリを解放します: '.($s-$e );
//出力は 272 ですが、上記のテスト変数を $test=str_repeat("1",255) に変更すると、出力は 0 になります。変数の値が 256 未満の場合、メモリはbe release
?>


なぜ 256 ではなく 272 なのかについては、内部でどのように処理されているかはわかりません。


コードをコピーします

コードは次のとおりです:
< ?php $test = str_repeat("1",256); $p = &$test;
unset($test);
echo $p ;
//出力は 256 個の 1 です。上記を unset($p) に変更すると、さらに悪いことに、echo $test は 256 1
?> を直接表示します。これは、メモリ内に $a に割り当てられた値がまだ存在していることを意味します。 unset() ではメモリを解放する効果が得られないことがわかります。
ただし、上記のコードに $test=null を追加するか、unset($p) を追加すると、メモリを解放する効果を得ることができます。PHP unset() 関数のテスト コードは次のとおりです。

null への変数の代入。メソッド:



コードをコピーします

コードは次のとおりです:

< ?php
$test = str_repeat("1",256);
$p = &$test;
$s =memory_get_usage();
$test = null;
unset($test);この文の順序を変更して $test=null にすると、結果は異なります
$e =memory_get_usage();
echo ' メモリを解放します: '.($s-$e);
//出力は 272 です
var_dump($p); //出力は NULL です
?> アドレス内の値を指すすべての変数を破棄するメソッド:


コードをコピーします:
< ?php $test = str_repeat("1",256); $p = &$test;
$s =memory_get_usage();
//次の 2 つの順序は設定されていないことに注意してください() は逆になりますが、結果には影響しません
unset( $p);
unset($test);
$e =memory_get_usage();
echo ' メモリを解放します: '.($s-$e); /出力は 272
?>


この PHP へ unset() 関数のデモが完了しました。


http://www.bkjia.com/PHPjc/327666.html
www.bkjia.com

tru​​ehttp://www.bkjia.com/PHPjc/327666.html技術記事 PHP の未設定グローバル変数は、実際に使用されているローカル変数を破壊することしかできず、グローバル変数の目的を達成することはできません。以下でこの問題を詳しく解決してみましょう。お役に立てれば幸いです。 ...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。