PHPの静的変数(static変数)を知る
GithubでPHPのコードを読んでいたら、見慣れない変数の宣言方法を見かけました。
<?php function hoge($key){ static $label = ['りんご', 'みかん', 'バナナ']; return $label[$key]; }
メソッド内で使う変数にstaticをつけて宣言しています。このような変数のことを、静的変数(static変数)と呼ぶらしいです。
PHPの公式ドキュメントによると、静的変数は以下のように説明されています。
静的変数はローカル関数スコープのみに存在しますが、プログラム実行がこのスコープの外で行われるようになってもその値を失いません。
つまり静的変数はどういう動きをするかというと。
<?php function counter(){ static $n = 0; $n++; return $n; } echo counter(); // => 1 echo counter(); // => 2 echo counter(); // => 3
$n
は関数が最初に呼び出されたときに初期化されて0が入りますが、その後関数が呼び出されても0で上書きされず、値が加算されていきます。
今まで同じ挙動を実現したいときはclassのプロパティを作って実装していましたが、こんな方法があったんだなー。 Githubでいろんなコードを見てると、こんな書き方できるんだ!と言う発見があって楽しい。