globalを使う
グローバル変数の適用範囲を変更し、関数内部でもりようできるように
することができます。globalというキーワードを使います。
サンプルコードの実行結果はこちら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
<!doctype html> <html> <head> <meta charset="utf-8"> <title></title> <link rel="stylesheet" href="../style.css"> </head> <body> <?php //グローバル変数 $a = 100; echo "変数\$aの値{$a}<br>"; /* echo "変数\$bの値{$b}<br>"; echo "変数\$cの値{$c}<br>"; 他の関数内のローカル変数は使用不可 */ echo "<br><hr><br>"; testB(); testC(); function testB(){ //グローバル変数を関数内部で使用可能 global $a; $b = 10; echo "<br><hr><br>"; //グローバル変数は$aは使用可能 echo "変数\$aの値{$a}<br>"; echo "変数\$bの値{$b}<br>"; /* 他の関数内のローカル変数は使用不可 echo "変数\$cの値{$c}<br>"; */ } function testC(){ //グローバル変数を関数内部で使用可能 global $a; $c = 50; echo "<br><hr><br>"; //グローバル変数は$aは使用可能 echo "変数\$aの値{$a}<br>"; /* 他の関数内のローカル変数は使用不可 echo "変数\$bの値{$b}<br>"; */ echo "変数\$cの値{$c}<br>"; } ?> </body> </html> |
関数の中で、グローバル変数にglobalと文言を加えています。
global $a;
これをグローバル変数の宣言といい、globalを使って変数を宣言すると、
それ以降、$aという名前でグローバル変数を使うことができます。
関数内でグローバル変数を使うことができるようになります。
ローカル変数の名前が重複した場合
同じ関数内のローカル変数には同じ名前をつけることはできません。
ただ、異なる関数内のローカル変数であれば、同じ名前をつけても
大丈夫です。
function test1(){
$a = 0;
$a++;
}
function test2(){
$a = 0;
$a++;
}
変数$aを2か所で宣言してますが、
異なる関数内なので大丈夫です。
上記の2つの変数は同じ名前ですが、
別々の変数として扱われます。
グローバル変数と名前が重複すると
グローバル変数とローカル変数は、同じ変数名を使っても大丈夫です。
サンプルコードの実行結果はこちら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<!doctype html> <html> <head> <meta charset="utf-8"> <title></title> <link rel="stylesheet" href="../style.css"> </head> <body> <?php //グローバル変数 $a = 1; //グローバル変数$aをインクリメント $a++; //グローバル変数$aの値を出力 echo "\$aの値:{$a}<br>"; func(); function func(){ //ローカル変数 $a = 10; //ローカル変数$aをインクリメント $a++; //グローバル変数$aの値を出力 echo "\$aの値:{$a}(func()内)<br>"; } ?> </body> </html> |
グローバル変数として「変数$a」を定義して、func内関数内で、さらに
ローカル変数として「変数$a」を定義、
グローバル変数とローカル変数を同じ名前にすることが可能ですが、
ローカル変数で宣言したfunc()内ので「$a++;」と書けば、
ローカル変数の$aを指します。インクリメントされるのは
ローカル変数の$aです。一方で、関数外でインクリメントされるのは
グローバル変数の$aとなります。