# phpのglobalキーワード,staticキーワード ###### tags: `php` どっちも関数内部で宣言するキーワードである. ## globalキーワード 外部変数を変数内部で利用できるようになる. ### サンプルコード 以下は動作しない. ```php <?php function func() { echo $x; } $x = 'aaa'; func() ``` https://3v4l.org/WDb5S 以下は動作する. ```diff <?php function func() { + global $x; echo $x; } $x = 'aaa'; func(); ``` https://3v4l.org/MBi7D globalキーワードをつけることで,`func()` 関数が外部変数`$x` を利用するようになる. ## staticキーワード 関数内で宣言された変数は,関数呼び出しが終わるとGCされてメモリから開放されるが,[staticキーワードで宣言すれば関数終了後も保持される](https://saitodev.co/article/PHP%E3%81%A7%E9%96%A2%E6%95%B0%E5%86%85%E3%81%AE%E5%A4%89%E6%95%B0%E3%81%AE%E3%83%A1%E3%83%A2%E3%83%AA%E9%A0%98%E5%9F%9F%E3%81%AF%E3%81%84%E3%81%A4%E8%A7%A3%E6%94%BE%E3%81%95%E3%82%8C%E3%82%8B%E3%81%8B%EF%BC%9F/). 次に再度関数を呼び出すと,保持された内容を再度利用することができる. ### サンプルコード ```php <?php function func() { static $x = 0; $x++; echo $x; } func(); func(); func(); ``` https://3v4l.org/I8QrT staticキーワードをつけた行の変数初期化処理は,1回しか実行されない様子. ### 過程で生まれた関連記事 [staticキーワードをつけた関数内定義変数をunsetするとどうなるか](https://qiita.com/taro-hida/items/308e4422bca633f078cb) [無駄にstatic変数を使ってメモリを無駄遣いするコード](https://zenn.dev/tarohida/articles/26fb1f7b4554f8a2015f)