PHP における global と $GLOBALS[] の使用法と違い

巴扎黑
リリース: 2016-11-11 15:00:42
オリジナル
1238 人が閲覧しました

変数のスコープは、変数が定義されているコンテキスト (つまり、その有効スコープ) です。ほとんどの PHP 変数にはスコープが 1 つだけあります。この単一スコープ スパンには、include および require によって導入されたファイルも含まれます。例:

Php コード

<?php  
$a = 1;  
include &#39;b.inc&#39;;  
?>
ログイン後にコピー

ここで、変数 $a は、インクルードされたファイル b.inc で有効になります。ただし、ユーザー定義関数では、ローカル関数スコープが導入されます。関数内で使用される変数は、デフォルトではローカル関数のスコープに制限されます。例:

Php コード

<?php  
$a = 1; /* global scope */  
  
function Test()  
{  
    echo $a; /* reference to local scope variable */  
}  
  
Test();  
?>
ログイン後にコピー

echo ステートメントは変数 $a のローカル バージョンを参照しており、このスコープ内の値が割り当てられていないため、このスクリプトには出力はありません。 PHP のグローバル変数は C 言語とは少し異なることに気づくかもしれません。C 言語では、ローカル変数によってオーバーライドされない限り、グローバル変数は関数内で自動的に有効になります。これにより問題が発生する可能性があり、誰かが誤ってグローバル変数を変更してしまう可能性があります。 PHP のグローバル変数を関数で使用する場合は、グローバル変数を宣言する必要があります。

グローバル キーワード

まず、グローバルの使用例:

例 #1 グローバルの使用

Php コード

<?php  
$a = 1;  
$b = 2;  
  
function Sum()  
{  
    global $a, $b;  
  
    $b = $a + $b;  
}  
  
Sum();  
echo $b;  
?>
ログイン後にコピー

上記のスクリプトの出力は「3」になります。グローバル変数 $a および $b が関数内で宣言されると、いずれかの変数へのすべての参照がそのグローバル バージョンを指します。 PHP では、関数が宣言できるグローバル変数の最大数に制限はありません。

グローバル スコープ内の変数にアクセスする 2 番目の方法は、特別な PHP カスタム $GLOBALS 配列を使用することです。前の例は次のように記述できます:

例 #2 $GLOBALS を使用して global

Php コードを置き換えます

<?php  
$a = 1;  
$b = 2;  
  
function Sum()  
{  
    $GLOBALS[&#39;b&#39;] = $GLOBALS[&#39;a&#39;] + $GLOBALS[&#39;b&#39;];  
}  
  
Sum();  
echo $b;//3  
?>
ログイン後にコピー

$GLOBALS は連想配列であり、各変数は要素であり、キー名は変数に対応します名前、値は変数 Content に対応します。 $GLOBALS はスーパーグローバル変数であるため、$GLOBALS はグローバル スコープ内に存在します。次の例は、スーパー グローバル変数の使用方法を示しています。

例 #3 スーパー グローバル変数とスコープを示す例

Php コード

<?php  
function test_global()  
{  
    // 大多数的预定义变量并不 "super",它们需要用 &#39;global&#39; 关键字来使它们在函数的本地区域中有效。  
    global $HTTP_POST_VARS;  
  
    echo $HTTP_POST_VARS[&#39;name&#39;];  
  
    // Superglobals 在任何范围内都有效,它们并不需要 &#39;global&#39; 声明。Superglobals 是在 PHP 4.1.0 引入的。  
    echo $_POST[&#39;name&#39;];  
}  
?>
ログイン後にコピー

global と $GLOBALS[] の違い

$GLOBALS['var' ]は外部グローバル変数そのもの、global $var は外部 $var

Php コード

<?php   
$var1 = 1;   
function test(){   
unset($GLOBALS[&#39;var1&#39;]);   
}   
test();   
echo $var1;   
?>
ログイン後にコピー

の同じ名前の参照またはポインタです。 結果: 注意: 未定義の変数: var1。変数 var1 が unset 関数によって削除されたためです。

Php コード

 <?php   
$var1 = 1;   
function test(){   
global $var1;   
unset($var1);   
}   
test();   
echo $var1;   
?>
ログイン後にコピー
結果: Print 1

エイリアス参照のみが削除され、その値は一切変更されていません。

global $var は実際には &$GLOBALS['var'] であり、これは外部変数を呼び出すための単なるエイリアスです。上記のコードの

$var1 と $GLOBALS['var1'] は、同じ変数自体を参照しています。

PHP のグローバル変数の機能はグローバル変数を定義することですが、このグローバル変数は Web サイト全体に適用されるのではなく、include または require 内のすべてのファイルを含む現在のページに適用されます。

結論:

1.$GLOBALS['var'] は外部グローバル変数そのものです

2.global $var は外部 $var の同じ名前の参照またはポインタです。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!