ホームページ > バックエンド開発 > PHPチュートリアル > PHP_PHP チュートリアルにおける静的キーワード原則の調査、研究、分析

PHP_PHP チュートリアルにおける静的キーワード原則の調査、研究、分析

WBOY
リリース: 2016-07-21 15:26:33
オリジナル
761 人が閲覧しました

看PHP手册的时候发现了下面这样一段代码:

复制代码 代码如下:

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

执行结果如下:
这是一个递归的函数,声明的静态变量count记录次数,输出1~10。
我在看的时候有个疑惑,递归调用的时候 static $count = 0; 语句会重复执行,这为什么不会导致count变量被重复赋值呢?带着这个疑问和同事研究了一下,测试用代码如下:
复制代码 代码如下:

echo 'start
';
static $a = 10;
echo "$a
";
unset($GLOBALS['a']);
echo "$a
";
static $a = 20;
echo "$a
";
$GLOBALS['a'] = 10;
echo "$a
";
static $a = 30;
echo "$a
";
unset($GLOBALS['a']);
echo "$a
";
static $a;
echo "$a
";
static $a = 40;
echo "$a
";
$a = 100;
echo "$a
";
static $a = 50;
echo "$a
";
static $a = 4;
echo "$a
";
echo 'end
';
exit;
?>

执行结果如下:
start
  1. Notice: Undefined variable: a 
  2. 10 
  3. 10 
  4. Notice: Undefined variable: a 
  5. 10 
  6. 10 
  7. 100 
  8. 100 
  9. 100 
  10. end
(结果中关于文件位置的部分已删去。也可以去掉echo语句使用zend的debug功能查看,这样结果更清晰)

代码第5行第一次输出$a的值为4,由此推测PHP在页面初始化的时候分配静态变量的内存,此时使用了同一个变量的最后一次声明的值(这个可以把4改为其他数测试)。代码第7行调用unset函数销毁变量$a,再次输出$a的值时看到未定义变量的提示,说明变量已经被销毁。

10 行目が再度出力されると、出力結果は 20 ではなく 4 のままです。 1 つは PHP が $a の値を再度初期化すること、もう 1 つは PHP がその前に $a の値を使用することです。 20行目を出力すると問題は解決します。 $a の値は 16 行目で破棄されたときは 10 ですが、19 行目で宣言された後も出力は 10 のままです。

11行目で$aの値が10に変更され、14行目で$aが再度宣言され、17行目で出力が10とみなされます。宣言が繰り返された場合、PHP は静的変数メモリ内の値を再割り当てせずに引き続き使用すると推測されます。

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

間違った認識があるかもしれませんが、お気軽にコメントください。

www.bkjia.com本当http://www.bkjia.com/PHPjc/323948.html技術記事 PHP マニュアルを読んでいると、次のようなコードが見つかりました。 以下のようにコードをコピーします。 ; } $ クー...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート