- var_dump: documentation ( source)
<?php
// よくある変数宣言と代入の例
$a = 17;
// グローバルスコープに現在定義されているすべての変数への参照を含む連想配列である $GLOBALS から $a を見る
// @see https://www.php.net/manual/ja/reserved.variables.globals.php
echo '$a: '.$GLOBALS['a']."\n"; // $a: 17
// $0 を作る例
// $0 = 31; // ←は文法エラーとなります。
// 次リンクには" 有効な変数名は文字またはアンダースコアから始まり、任意の数の文字、 数字、アンダースコアが続きます"とあります。
// https://www.php.net/manual/ja/language.variables.basics.php
// $0 がグローバルスコープにないことを確認
var_dump(isset($GLOBALS[0])); // bool(false)
// 可変変数で変数名として 0 を使います
$varName = 0;
$$varName = 31;
// $0 がグローバルスコープに増えたことを確認
var_dump(isset($GLOBALS[0])); // bool(true)
echo '$0: '.$GLOBALS[0]."\n"; // $0: 31 // グローバルスコープ参照
echo '$0: '.$$varName."\n"; // $0: 31 // 可変変数参照
echo "$0: ${$varName}\n"; // $0: 31 // 可変変数的文字列中の変数のパース https://www.php.net/manual/ja/language.types.string.php#language.types.string.parsing
echo "$0: ${0}\n"; // $0: 31 // 直打ち的文字列中の変数のパース https://www.php.net/manual/ja/language.types.string.php#language.types.string.parsing
// また、上の $0 同様にこれを利用して定義済み変数の $GLOBALS とは別のグローバルスコープ下にある $GLOBALS を作れます。
// $GLOBALS が通常のグローバルスコープ下にないことを確認
var_dump(isset($GLOBALS['GLOBALS'])); // bool(false)
$varName = 'GLOBALS';
$$varName = 47;
// $GLOBALS が通常のグローバルスコープ下に増えたことを確認
var_dump(isset($GLOBALS['GLOBALS'])); // bool(true)
echo '$GLOBALS: '.$GLOBALS['GLOBALS']."\n"; // $GLOBALS: 47 // 通常のグローバルスコープ参照
echo '$GLOBALS: '.$$varName."\n"; // $GLOBALS: 47 // 可変変数参照
// 文字列宙の変数のパースでは可変変数的に呼び出すか定義済み名そのもので呼び出すかで挙動が変わります。
// 可変変数的に文字列中の変数のパース
echo "\$GLOBALS: ${$varName}\n"; // $GLOBALS: 47
// 定義済み名そのもので文字列中の変数のパース
echo "\$GLOBALS: ${'GLOBALS'}\n";
// Warning: Array to string conversion in xxx
// $GLOBALS: Array