darudaru

だるだるしてるエンジニア

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でいろんなコードを見てると、こんな書き方できるんだ!と言う発見があって楽しい。