ホームページ > バックエンド開発 > PHPチュートリアル > スターアライアンスPHPにおける静的キーワード原理の調査と分析

スターアライアンスPHPにおける静的キーワード原理の調査と分析

WBOY
リリース: 2016-07-29 08:46:12
オリジナル
870 人が閲覧しました

PHP マニュアルを読んでいると、次のコードを見つけました:

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


function Test()
{
static $count = 0; $count++;
echo $count;
if ($count < 10) {
$count--;


実行結果は次のとおりです。静的に宣言された再帰関数。変数 count は回数を記録し、1 ~ 10 を出力します。
見ていて疑問に思ったのですが、再帰的に呼び出すと static $count = 0; という文が繰り返し実行されるのですが、なぜ count 変数が繰り返し代入されないのでしょうか?同僚とこの質問を検討したところ、テスト コードは次のとおりです。


コードをコピーします

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

echo 'start
'; $a = 10 ; echo "$a
";
echo "$a
";

echo "$a
";

$GLOBALS['a'] = 10;
echo "$a
"; ;br />gt ;";
unset($GLOBALS['a']);
echo "$a
";
static $a;
echo "$a
";
静的 $a = 40;
$a = 100;
静的 $a = 50; a
";
static $a = 4;
echo "$a
";
echo 'end
';
exit;
?>




実行 結果は以下の通りです:


start





4


注意: 未定義変数: a


4
10 10 定義された変数: a

    10
  1. 10
  2. 100
  3. 100
  4. 100
  5. end
  6. (結果のファイルの場所に関する部分は削除されました。echo ステートメントを削除することもできます)そしてzendを使用してくださいより明確に結果を表示するには、デバッグ関数を使用します)
  7. 初めて出力されたコードの 5 行目の値 $a
  8. は、PHP が静的変数のメモリを割り当てると推測されます。ページが初期化され、この時点で同じ変数の最後の部分が使用されます (これは、4 を別の数値に変更することでテストできます)。コードの 7 行目では、unset 関数を呼び出して変数 $a を破棄します。$a の値が再度出力されると、変数が破棄されたことを示す未定義変数プロンプトが表示されます。
  9. 10 行目を再度出力すると、出力結果は 20 ではなく 4 のままです。 1 つは PHP が $a の値を再度初期化すること、もう 1 つは PHP が $a の値を使用することです。破棄される前に、20 行目を出力するとこの問題は解決されます。 $a の値は 16 行目で破棄されたときは 10 ですが、19 行目で宣言された後も出力は 10 のままです。
  10. 11行目で$aの値を10に変更し、14行目で再度$aを宣言すると、17行目の出力は10とみなされます。宣言が繰り返された場合、PHP は静的変数メモリ内の値を再割り当てせずに引き続き使用すると推測されます。

この時点で、マニュアルで見つかった問題はほぼ解決されました。つまり、再帰呼び出し内のステートメントは $count の値を変更しなかったため、$count=10 で再帰が正常に停止しました。

間違った理解があるかもしれませんが、お気軽にコメントください。 以上、スターアライアンス PHP における静的キーワード原理の調査、研究、分析をスターアライアンスの内容も含めて紹介しましたので、PHP チュートリアルに興味のある友人の参考になれば幸いです。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート