タイトル通りstaticキーワードのメモになります。
(クラスメンバにつけてスタティックメンバを云々。。。の話ではないです。あしからず)
なんとなーくでstaticについて調べていたら
「静的な変数の定義」という言葉がでてきました。
あまり気にしてなかったのですが調べてみたらあまり理解してねーやってことで
さっそくスクリプト書いて試したのをメモっておきます
まずはstatic使わない場合
<?php function static_test(){ $a = 0; $a++; echo $a . "\n"; } static_test(); static_test(); static_test(); ?>
出力結果
# php -f static_var_test.php 1 1 1
次にstatic使った場合
<?php function static_test(){ static $a = 0; //←違いはここだけ $a++; echo $a . "\n"; } static_test(); static_test(); static_test(); ?>
出力結果
# php -f static_var_test.php 1 2 3
関数が最初にコールされたときにのみ初期化されるらしいです。これが「静的な変数の定義」と。
phpにおけるstaticには下記の3つの用途があるようです
- クラスの静的なメソッドやプロパティを定義する
- 静的な変数の定義
- 静的遅延束縛