この関数は、呼び出されるたびに $w3sky の値を 0 に設定し、「0」を出力するため、 ではほとんど役に立ちません。この関数が終了すると変数 $w3sky は存在しないため、変数 $w3sky++ を 1 つ増やしても効果はありません。このカウント値を失わないカウント関数を作成するには、変数 $w3sky を静的として定義します:
PHP 静的変数 static を使用した例
<ol class="dp-xml"> <li class="alt"><span><span class="tag"><span> ?PHP </span></span></span></li> <li><span>function Test(){ </span></li> <li class="alt"> <span>static $</span><span class="attribute">w3sky</span><span> = </span><span class="attribute-value">0</span><span>; </span> </li> <li><span>echo $w3sky; </span></li> <li class="alt"><span>$w3sky++; </span></li> <li><span>} </span></li> <li class="alt"> <span class="tag">?></span><span> </span> </li> </ol>
これで、Test() 関数が呼び出されるたびに、$w3sky が出力値になります。そして1つ追加します。
静的変数は、再帰関数を処理する方法も提供します。再帰関数は、それ自体を呼び出す関数です。再帰関数を作成するときは、無限に再帰する可能性があるので注意してください。再帰を終了する適切な方法があることを確認する必要があります。静的変数 $count を使用して再帰的に 10 までカウントし、いつ停止するかを決定するこの単純な関数について考えてみましょう:
PHP 静的変数の静的関数と再帰関数の例
<ol class="dp-xml"> <li class="alt"><span><span class="tag"><span> ?PHP </span></span></span></li> <li><span>function Test(){ </span></li> <li class="alt"> <span>static $</span><span class="attribute">count</span><span> = </span><span class="attribute-value">0</span><span>; </span> </li> <li><span>$count++; </span></li> <li class="alt"><span>echo $count; </span></li> <li> <span>if ($count </span><span class="tag"><span> </span><span class="tag-name">10</span><span>) { </span></span> </li> <li class="alt"><span>Test(); </span></li> <li><span>} </span></li> <li class="alt"><span>$count--; </span></li> <li><span>} </span></li> <li class="alt"> <span class="tag">?></span><span> </span> </li> </ol>
注: 静的変数は例のように宣言できます。その上。これを宣言内の式の結果に代入すると、解析エラーが発生します。
例 PHP 静的変数 static を宣言する
<ol class="dp-xml"> <li class="alt"><span><span class="tag"><span> ?PHP </span></span></span></li> <li><span>function foo(){ </span></li> <li class="alt"> <span>static $</span><span class="attribute">int</span><span> = </span><span class="attribute-value">0</span><span>;// correct </span> </li> <li> <span>static $</span><span class="attribute">int</span><span> = </span><span class="attribute-value">1</span><span>+2; // wrong (as it is an expression_r_r) </span> </li> <li class="alt"> <span>static $</span><span class="attribute">int</span><span> = </span><span class="attribute-value">sqrt</span><span>(121); // wrong (as it is an expression_r_r too) </span> </li> <li><span>$int++; </span></li> <li class="alt"><span>echo $int; </span></li> <li><span>} </span></li> <li class="alt"> <span class="tag">?></span><span> </span> </li> </ol>