PHPでは、定数とグローバル変数は2つの一般的な変数タイプです。それらは範囲と可視性が大きく異なります。通常、定数はスクリプト全体に表示されますが、グローバル変数はスコープされます。この記事では、PHPの組み込みget_defined_constants関数を使用して、異なるスコープでの定数変数とグローバル変数の可視性の違いを調査します。
まず、定数とグローバル変数の基本概念を理解する必要があります。
定数は、スクリプトライフサイクル全体で不変の識別子です。定数が定義されると、その値を変更することはできません。定数は、定義されたときに$でマークする必要はなく、スクリプトのどこにでもアクセスできます。
グローバル変数とは、グローバル範囲で定義された変数を指します。関数またはクラスのメソッド内で直接アクセスできるわけではなく、グローバルキーワードまたは$ Globalsアレイを使用してアクセスする必要があります。
get_defined_constantsは、すべての定義された定数をリストする非常に便利なPHP関数です。それを使用して、異なるスコープでの定数の可視性を確認できます。 get_defined_constants関数を使用して定数の可視性を取得する方法を示すサンプルコードは次のとおりです。
<?php
// 定数を定義します
define('MY_CONSTANT', 'Hello, World!');
function testConstantVisibility() {
// 現在の範囲ですべての定数を取得します
print_r(get_defined_constants());
}
testConstantVisibility();
?>
このコードでは、一定のmy_constantを定義し、関数TestConstantVisibilityのget_defined_constants関数を使用してすべての定数を印刷します。私たちがいるスコープに関係なく、一定のmy_constantが表示されます。
Array
(
[MY_CONSTANT] => Hello, World!
...
)
出力からわかるように、 My_Constant定数は関数内にまだ表示されます。つまり、定数はPHPでグローバルに表示されます。
グローバル変数は定数とは異なり、関数内で直接アクセスすることはできません。グローバル変数にアクセスするには、グローバルキーワードまたは$ Globalsアレイを使用する必要があります。グローバル変数の可視性を示すコードは次のとおりです。
<?php
// グローバル変数を定義します
$myGlobalVar = 'I am a global variable!';
function testGlobalVariableVisibility() {
global $myGlobalVar; // 使用 global キーワード
echo $myGlobalVar;
}
testGlobalVariableVisibility();
?>
I am a global variable!
関数内のグローバルキーワードを使用することにより、グローバル変数$ myglobalvarにアクセスし、その値を正常に出力することができます。
次に、異なるスコープでの定数変数とグローバル変数のパフォーマンスを比較しましょう。次のコードを使用して、定数とグローバル変数の可視性の違いを同時にテストできます。
<?php
// 定数を定義します
define('MY_CONSTANT', 'Hello, World!');
// グローバル変数を定義します
$myGlobalVar = 'I am a global variable!';
function testVisibility() {
// 現在の範囲ですべての定数を取得します
echo "絶え間ない MY_CONSTANT: " . MY_CONSTANT . "\n";
// 使用 global キーワード访问グローバル変数
global $myGlobalVar;
echo "グローバル変数 myGlobalVar: " . $myGlobalVar;
}
testVisibility();
?>
絶え間ない MY_CONSTANT: Hello, World!
グローバル変数 myGlobalVar: I am a global variable!
この例を通じて、定数はどこでも直接アクセスできることがわかりますが、グローバル変数は関数内のグローバルキーワードを介してアクセスする必要があります。これは、定数とグローバル変数の範囲の主な違いです。
PHPでは、定数とグローバル変数の間に視界に大きな違いがあります。定数は、範囲に関係なく、スクリプト全体に表示されます。グローバル変数は、グローバルスコープでのみ表示され、グローバルキーワードまたは$ Globalsアレイを介してアクセスする必要があります。この違いは、プログラミング時の範囲管理にとって重要であり、その動作を理解することで、開発者がコードをよりよく書き、潜在的なエラーを回避するのに役立ちます。