誰かが不用意にグローバル変数を変更する可能性があるため、問題が発生する可能性があります。 PHP のグローバル変数は、関数で使用する場合はグローバルとして宣言する必要があります (Global キーワードは関数で定義されている場合にのみ有効であることに注意してください)。
1: Global の役割はグローバル変数を定義することですが、このグローバル変数は Web サイト全体ではなく、現在のページ (include または require 内のすべてのファイルを含む) に適用されます。
コードをコピーします コードは次のとおりです。
$a=123; function aa( )
{
Global $a; //$a がグローバル変数として定義されていない場合、関数本体は関数本体の外で $a にアクセスできませんが、同じ名前の $a を定義できます。このとき、この変数はローカル変数であり、C言語のローカル変数に相当し、関数本体内でのみ使用できます。
echo $a;
}
aa();
?>
コードをコピー コードは次のとおりです。
$global $a;
$a=123;
function f()
{
echo $a; //エラー、
}
//次の例をもう一度見てください。 >function f()
{
global $a;
$a=123;
f(); // 正しい、
2: グローバル問題分析:
質問: config.inc.php でいくつかの変数 ($a) を定義しましたが、他のファイルでは関数に ("config.inc.php" ) 外部で、これは関数内で必要です。これらの変数 $a を使用すると、宣言されていない場合、echo $a は何も出力しません。そこで、global $a を宣言しますが、関数も変数もたくさんあり、このように繰り返し宣言することはできませんよね。何か良い解決策があればアドバイスをお願いします。
答え 1: まず、config.inc.php で定数を定義します。define(定数名, 定数値)
次に、使用する必要がある他の場所で 'config.inc.php' を要求します。
$w3sky = 1; $w3sky2 = 2;
function Sum(){
global $w3sky, $w3sky2; $w3sky2 = $ w3sky $w3sky2;
}Sum();
echo $w3sky2;>
上記のスクリプトの出力は「3」になります。グローバル変数 $w3sky と $w3sky2 は関数内で宣言されており、任意の変数のすべての参照変数はグローバル変数を指します。 PHP では、関数が宣言できるグローバル変数の最大数に制限はありません。
グローバル スコープ内の変数にアクセスする 2 番目の方法は、特別な PHP カスタム $GLOBALS 配列を使用することです。前の例は次のように記述できます。
この例では、グローバルの代わりに $GLOBALS を使用します
PHP $w3sky = 1; $w3sky2 = 2; 関数 Sum() {
$GLOBALS['w3sky'] = $GLOBALS['w3sky' ] $GLOBALS['w3sky2'] ;}Sum();
echo $w3sky2;>
$GLOBALS 配列では、各変数は要素です、キー名は変数名に対応し、値は変数の内容に対応します。 $GLOBALS はスーパーグローバル変数であるため、$GLOBALS はグローバル スコープ内に存在します。次の例は、スーパーグローバル変数の使用法を示しています。
スーパーグローバル変数とスコープの例を示す例
コードをコピー
function test_global() { // ほとんどの事前定義変数は「スーパー」ではなく、関数内で変数を有効にするには「global」キーワードを使用する必要があります。ローカルゾーンで。 global $HTTP_POST_VARS;echo $HTTP_POST_VARS['name'];// スーパーグローバルはどのスコープでも有効であり、「グローバル」宣言は必要ありません。スーパーグローバルは PHP 4.1.0 で導入されました。
echo $_POST['name'];}
?>
global つまり、ファイル内で global $ として宣言している限りこれで、この $db を参照できるようになります。
4. 私は当初、global と $GLOBALS は記述方法が異なることを除いて同じであると考えていましたが、実際のアプリケーションでは、この 2 つの違いは依然として非常に大きいことがわかりました。
次の例を見てください。最初:
// 例 1
function test_global() {
global $var1, $var2;
$var2 =& $var1;
🎜>関数 test_globals() {
$GLOBALS['var3'] =& $GLOBALS['var1'];
}
$var2 = $var3 = 0;
test_global();
print $var2 ."n";
print $var3 ."n";
コードをコピーします
実行結果は次のとおりです:
0
コードは次のとおりです: // 例 2
function test() { グローバル $a;
$a = 1;
print $a; 🎜>
コードをコピー
実行結果は次のとおりです:
1
なぜ 1 が出力されるのですか? $a の設定が解除されていませんか?設定解除に失敗しましたか? PHPのバグ?
いいえ、実際には、unset は機能します。
print $a;
コードをコピーしてテストします。つまり、global はテスト関数の外側の $a に対してエイリアス変数 "$a" を生成し、それを --test->$a と呼びます。次の図が表示されます:
test_globals が実行された後、変数の変更を確認します: