今回のお題は
変数のスコープ、有効範囲についてです。
\登場人物はー?/
・ローカル変数
・グローバル変数
・静的(static)変数
コメントつけまくったらすんごーい醜いww
▶️ローカル変数
関数内で定義されて、有効範囲はその関数内のみ。
4行目の$aはローカル変数ではない。
4 $a = 1; 5 function showLocalNum() 6 { 7 //-----ローカル変数 $aのスコープ ここから----- 8 $a = 2; // ←ローカル変数 $aの定義 9 print 'ローカル変数 $a: ' . $a . "\n"; 10 //-----ローカル変数 $aのスコープ ここまで----- 11 } 12 showLocalNum(); // 2 →ローカル変数 $a 13 print '4行目の$a: ' . $a . "\n"; //8行目のローカル変数の$aではない。
ローカル変数 $a: 2 4行目の$a: 1
▶️グローバル変数
関数内外問わず定義され、有効範囲はPHPスクリプト全体
17 $g = 1; 18 function showGlobalNum() 19 { 20 global $g; 21 $g++; 22 print 'グローバル変数 $g: ' . $g . "\n"; 23 } 24 print '関数showGlobalNum実行前の17行目の$g: ' . $g . "\n"; // 1 まだグローバル変数になってない。 25 showGlobalNum(); // 2 →グローバル変数 $g 26 showGlobalNum(); // 3 →グローバル変数 $g 27 print '関数showGlobalNum実行前後の17行目の$g: ' . $g . "\n"; // 3 グローバル変数 $gになってる
関数showGlobalNum実行前の17行目の$g: 1 グローバル変数 $g: 2 グローバル変数 $g: 3 関数showGlobalNum実行前後の17行目の$g: 3
▶️静的(static)変数
関数内で定義される。初期化は最初の一回のみ行われ、その後は前の値が残る。
31 //static $d = 100; //関数外では定義できない 32 function showStaticNum() 33 { 34 static $s = 100; //←ローカル変数 $sの定義 35 $s++; 36 print '静的(static)変数 $s: ' . $s . "\n"; 37 } 38 showStaticNum(); // 101 39 showStaticNum(); // 102 40 showStaticNum(); // 103
静的(static)変数 $s: 101 静的(static)変数 $s: 102 静的(static)変数 $s: 103
<まとめ>
ローカル変数しか、あんまり使わんけども。