PHPでグローバル変数を使用する方法についてご紹介します。
PHPの場合、グローバル変数が常用的に使用されます。普通であれば関数をコールする場合は引数に変数を設定して、返り値で結果を受け取って、、、というのが普通ですが、PHPの場合は全部の変数をグローバルにしてしまうなんて事もあります。
使い過ぎはどうなのかとも思いますが、HTMLの中で使用する変数のため、グローバル変数として使用した方が使い勝手が良いのかもしれませんね。他の方のコードを参照する際にも、グローバル変数が多用されている可能性もあるので、改めてグローバル変数の使い方を知っておくと良いと思います。
という事でグローバル変数の使い方について見ていきましょう。
コンテンツ
PHPのグローバル変数の使い方
では、グローバル変数の使い方を見ていきましょう。
グローバル変数の使い方の基本
グローバル変数の使い方は非常に簡単で、使用する変数の前に「global」と付けてあげれば良いだけです。
実際にサンプルコードを見てみて下さい。
■PHPコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php $val1 = 5; $val2 = 7; $total_val = 0; calc(); echo $total_val; function calc() { global $val1, $val2,$total_val; $total_val = $val1 + $val2; } ?> |
■実行結果
1 |
12 |
$total_valの値が先頭で設定された0ではなく、calc関数の計算結果になっていますね。返り値は受け取っていないので、グローバルの値として使用できている事が分かると思います。
※ちなみに「include ‘test.php’;」の様に記述したincludeの中の関数でもglobalは使用可能
globalを使用しない場合
ちなみに、globalを使用しないとどうなるのでしょうか?
こちらの実行結果を見てみて下さい。
■PHPコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php $val1 = 5; $val2 = 7; $total_val = 0; calc(); echo $total_val; function calc() { $val1=1; $val2=1; $total_val = $val1 + $val2; } ?> |
■実行結果
1 |
0 |
global定義されていないため、関数の実行結果によらず結果は元々の値である0となります。当たり前と言えば当たり前の結果ですね。
PHPのグローバル変数の色々な記載方法
基本的な使い方は分かったかと思いますが、グローバル変数定義の記述方法は人それぞれです。一つの書き方しかしらないと、他の人のコードを見た時に意味を掴めません。
先ほどお伝えした基本的な記述方法と大体は似ていますが、少し違った記述方法についてご紹介します。
実行結果がエラーとなるケースも記載していますので「こんな書き方はいいの?」という観点で確認してもらってもOKです。
グローバル変数は先頭で宣言をしなくともOK
グローバルで使用する変数を先頭で宣言しないとどうなるのでしょうか?
■PHPコード
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php calc(); echo $total_val; function calc() { global $val1, $val2,$total_val; $val1 = 10; $val2 = 5; $total_val = $val1 + $val2; } ?> |
■実行結果
1 |
15 |
問題無くグローバル変数として使用できましたね。ただ、やはりグローバルで使用する変数は先頭で記述しておいた方が可読性は高いと思います。
この場合、$total_valはどこから来たの?と思ってしまいますから。
先頭でグローバル宣言して、関数内ではグローバル宣言しない
先頭部分でグローバル宣言をして、関数内で使用する場合はグローバル宣言をしないとどうなるのでしょうか?
勝手に「あ、これはグローバル変数だぞ」と解釈してくれるのでしょうか?
■PHPコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php global $val1, $val2,$total_val; $val1 = 20; $val2 = 7; $total_val = 0; calc(); echo $total_val; function calc() { $total_val = $val1 + $val2; } ?> |
■実行結果(エラー)
1 2 |
PHP Notice: Undefined variable: val1 in /workspace/Main.php on line 12 PHP Notice: Undefined variable: val2 in /workspace/Main.php on line 12 |
エラーとなってしまいました。関数内で必ずグローバル宣言が必要になる様です。
つまり、globalという宣言は関数内で定義する時にしようする文法と言えます。
PHPのグローバル変数は配列も同じ様に使う事ができる
配列の場合も基本的に考え方は変わりません。
これまでの内容のおさらいをすると共に、配列のグローバル変数でも挙動を確認してみましょう。
PHPの場合は返り値として配列を返す記述方法もあるのですが、グローバル変数を使うケースも多い様です。
グローバル変数を使用しない場合
まずはグローバル変数を使用しない場合から。
関数の中で設定した配列の値を関数の外で出力してみましょう。出力にはvar_dump関数を使用します。
■PHPコード
1 2 3 4 5 6 7 8 9 10 |
<?php $array = array(); calc(); var_dump($array); function calc() { $array = array(1,2,3); } ?> |
■実行結果
1 2 |
array(0) { } |
calc関数の中と呼び出し側で同じ$arrayという配列を定義しています。
当然の事ながら、calc関数の中で設定した値は呼び出し側には引き継がれません。
配列にグローバル変数を使う
では配列($array)をグローバル変数として定義するケースを見ていきましょう。calc関数の中でグローバル宣言をした場合の挙動になります。
■PHPコード
1 2 3 4 5 6 7 8 9 10 11 |
<?php $array = array(); calc(); var_dump($array); function calc() { global $array; $array = array(1,2,3); } ?> |
■実行結果
1 2 3 4 5 6 7 8 |
array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } |
呼び出し側でvar_dumpしていますが、calc関数の中で設定した$arrayの中身が保持されている事が分かりますね。
配列に限らず、基本的に使用する関数の中でグローバルとして使用したい変数を「global」で定義すればOKと考えておけば良いです。
【注意】相変わらずNG
以下の記述方法は相変わらずNGとなってしまいます。
■PHPコード
1 2 3 4 5 6 7 8 9 10 |
<?php global $array; $array = array(4,5,6); calc(); function calc() { var_dump($array); } ?> |
■実行結果
1 |
PHP Notice: Undefined variable: array in /workspace/Main.php on line 8 |
グローバル宣言すると関数外の値も引き継ぐ
これは知らない人が以外といるケースですが、グローバル宣言をした変数は関数外で設定された値も引き継ぎます。
ちょっと注意が必要な使い方ですが、この挙動も確認しておきましょう。
■PHPコード
1 2 3 4 5 6 7 8 9 10 |
<?php $array = array(4,5,6); calc(); function calc() { global $array; var_dump($array); } ?> |
■実行結果
1 2 3 4 5 6 7 8 |
array(3) { [0]=> int(4) [1]=> int(5) [2]=> int(6) } |
関数外で設定された値をcalc関数の中でも使用できている事が分かります。
まとめ
PHPでのグローバル変数の使い方についてご紹介しました。
いくつかのサンプルをご紹介しましたので、他の人のプログラムを見ても大体分かるんじゃないかなと思います。
基本的には一番最初にご紹介した記述ルールに則っておくとベターですね^^