✏️

PHPとJavaScriptのグローバル変数へのアクセスの違い

2024/04/06に公開

JavaScriptとPHPのグローバル変数へのアクセスについてハマったのでメモします。

JavaScriptにおけるグローバル変数へのアクセス

JavaScriptではグローバルスコープで宣言された変数(グローバル変数)には、どこからでもアクセス出来るようになっています。
下記コードのように関数の中からグローバル変数にアクセスすることは、もちろん可能です。

const num = 1;
function hoge() {
    console.log(num); //グローバル変数のnumへアクセス可能
}
hoge(); // 1

PHPにおけるグローバル変数へのアクセス

PHPでもグローバル変数は存在しますが、JavaScriptと違って関数の中からグローバル変数にアクセスすることが出来ません。
下記のコードのように変数$numが定義されていないよ!と言われてしまいます。

<?php
$num = 1;
function hoge() {
    echo $num; //Undefined variable '$num'
}

関数の中からグローバル変数にアクセスしたい場合は下記のように書くとエラーが出ません。

$num = 1;
function hoge() {
    global $num;
    echo $num;
}
hoge(); // 1

言語ごとにスコープの考えは違う

今回はJavaScriptとPHPのスコープの違いを理解していなかったがために、悩んでしまいました。
PHPはJavaScriptにぱっと見て書き方が似ているが、ちゃんとその特性を理解しないといけないと考えさせられました。
もし記載の内容に誤りがあればご教示いただけますと幸いです。。。

Discussion