web関連

【PHP】スコープについて

2021/01/10

グローバルスコープの変数をローカルスコープで使おうと思ったら使えなかったので備忘録

グローバルスコープとローカルスコープ

グローバル変数とローカル変数との違いがわからなくて調べたら
スコープは「範囲」のことであり、どこからでも呼び出せる変数はグローバル変数でありグローバルスコープで、関数内の変数はローカル変数であり関数外からは呼び出せないからローカルスコープということらしい

以下の例は同じ変数をグローバルスコープとローカルスコープで宣言した例

// グローバルスコープ
$a = 1;// グローバル変数
function local(){
	// ローカルスコープ
	$a = 2;// ローカル変数
}
local();// 2
echo $a;// 1

また、ローカルスコープで変数$aを宣言しないと値はnullになる

// グローバルスコープ
$a = 1;// グローバル変数
function local(){
	// ローカルスコープ
    echo $a;// null
}
local();// null
echo $a;// 1

グローバルスコープであるグローバル変数を使うにはglobalキーワードを使うか配列$GLOBALSを使うパターンがある

globalを使った書き方

$a = 1;
function local(){
	global $a;
	$a = 2;// 代入
    echo $a;// 2
}
local();// 2
echo $a;// 2

$GLOBALSを使った書き方

$a = 1;
function local(){
	$GLOBALS['a'] = 2;// 代入
    echo $GLOBALS['a'];// 2
}
local();// 2
echo $a;// 2

また$GLOBALSは「スーパーグローバル」と呼ばれるものでどのスコープからでも呼び出せる
$_POSTや$_GETも同じで「スーパーグローバル」

ちょっとピンとこなかったんだけど要は$GLOBALS[‘変数’]、$_POST[‘変数’]や$_GET[‘変数’]という書き方であればどのスコープからでも呼び出すことができるということみたい
var_dump($GLOBALS)で中身を見たらグローバル変数?とかたくさん入ってた

他にstatic変数という最初の一度の呼び出し時のみ実行する変数があったりするみたいだけどスコープについて知りたかったのでここまでにしようと思う