そーくのつれづれぶろぐ

web系エンジニアの勉強したことなど

【PHP】グローバル変数の呼び出しでタイポしたときの挙動

動機

既に定義されているグローバル変数を関数内で呼び出す、となると、 もしタイポして定義されていないグローバル変数を参照しようとしてたら...PHPだともしやエラーとかでないのでは?と思って調べる。

  • 確認環境 : PHP7.3.6

結論

warning/errorともに出ず、NULLとなる

挙動

<?php

$gMsg = 'global variable';
use_global_keyword();
use_GLOBALES_array();

function use_global_keyword() {
    print 'use_global_keyword<br/>';
    global $gMsg;
    print "$gMsg<br/>";
    global $notDefined;
    print "定義されていない変数を呼び出す:{$notDefined}<br/>";
    var_dump($notDefined);
}

function use_GLOBALES_array() {
    print 'use_GLOBALES_array<br/>';
    print "{$GLOBALS['gMsg']}<br/>";
    print "定義されていない変数を呼び出す:{$GLOBALS['notDefined']}<br/>";
    var_dump($GLOBALS['notDefined']);   
}

実行結果

use_global_keyword
global variable
定義されていない変数を呼び出す:
NULL use_GLOBALES_array
global variable
定義されていない変数を呼び出す:
NULL

雑感

Javaから入った人間としてはPHPはいろいろゆるくてびっくりする。
Javaではコンパイルエラーなところがwarningだけで止まらない。場合によっては言語仕様によってwarningすら出ない。 今後判定条件を記述する際はあまり手を抜かずに厳密にやるようにする(そもそもそういうのを考えないようするための言語仕様な気がするが...