ホームページ > バックエンド開発 > PHPチュートリアル > PHP変数スコープの使い方のまとめ

PHP変数スコープの使い方のまとめ

WBOY
リリース: 2016-07-25 08:59:11
オリジナル
1245 人が閲覧しました
  1. function function_name() {
  2. global $var;
  3. }
  4. $var=20;
  5. function_name() // 関数呼び出し
  6. ?>
コードをコピー
;

この例では、関数内の $var は関数外の $var と同じになりました。これは、変数 $var の値がすでに 20 であり、この値が関数内で変更されると、関数外の $var の値も変更されることを意味します。 変数スコープを回避するもう 1 つの方法は、スーパーグローバル変数 ($_GET、$_POST、$_REQUEST など) を利用することです。これらの変数は関数内で自動的にアクセスできます (したがって、これらはスーパーグローバル変数です)。 $GLOBALS 配列に要素を追加して、関数内で使用できるようにすることもできます。

関数内でグローバル変数を使用しないことが最善です。関数を設計するときは、必要に応じてすべての値をパラメータとして受け入れ、必要に応じて任意の値を返すようにする必要があります。関数内でグローバル変数に依存すると、コンテキスト依存性が高まるため、有用性が低くなります。

PHP の変数には主に、組み込みスーパーグローバル変数、一般変数、定数、グローバル変数、静的変数などが含まれます

組み込みスーパーグローバル変数は、スクリプト内のどこでも使用および表示できます。つまり、PHP ページ内の値の 1 つを変更すると、他の PHP ページで使用されたときにその値も変更されます。

一度宣言すると、定数はグローバルに見えるようになります。つまり、関数の内部と外部で使用できますが、これは 1 つのページに含まれる PHP スクリプト (include と include_once で含めた PHP スクリプトを含む) にのみ限定されます。他のページでは使用できなくなります。

スクリプト内で宣言されたグローバル変数は、スクリプト全体で参照できますが、関数内では参照できません。関数内の変数がグローバル変数と同じ名前である場合、関数内の変数が優先されます。

関数内で使用される変数がグローバル変数として宣言されている場合、その名前はグローバル変数の名前と一致している必要があります。この場合、前の問題を回避するために、関数内で関数の外にあるグローバル変数を使用できます。問題は、関数内の変数が外部グローバル変数と同じ名前を持ち、外部変数をオーバーライドします。

関数内で作成され、static として宣言された変数は、関数の外では見ることができませんが、関数の複数回の実行中に値を維持できます。最も一般的な状況は、関数の再帰実行中です。

関数内で作成された変数は関数に対してローカルであり、関数が終了すると存在しなくなります。

スーパーグローバル変数の完全なリストは次のとおりです。

  1. $a = 4;
  2. function sendValue($x)
  3. {
  4. echo $x;
  5. }
  6. sendValue($a)?>
コードをコピー;
説明: $a は関数の外で定義されており、関数はパラメーターを定義します。関数が呼び出されるとき、$a はパラメーターの形式で渡されます。したがって、上記のコードは正常に実行できます。

  1. <?php
  2. $ a = 4;関数が呼び出されるとき、$a をパラメータとして渡すことはできません。したがって、上記のコードは正常に実行できません。 変数スコープ 変数のスコープは、変数が定義されているコンテキストです (翻訳者: 単刀直入に言うと、変数の有効スコープです)。ほとんどの PHP 変数にはスコープが 1 つだけあります。この単一スコープ スパンには、include および require によって導入されたファイルも含まれます。例:
  3. $a = 1;
  4. include "b.inc";
?>
コードをコピー

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

  2. function Test()

{
echo $a; /*ローカル スコープ変数への参照 */}

Test();

?>

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

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

    例 12-1. グローバルの使用

    1. $a = 1;
    2. $b = 2;

    3. function Sum()

    4. {
    5. global $a, $b ;

    6. $b = $a + $b;

    7. }

    8. Sum();

    9. echo $b;
    10. ?> ;
    コードをコピー
    上記のスクリプトの出力は「3」になります。グローバル変数 $a と $b は関数内で宣言されており、任意の変数のすべての参照変数はグローバル変数を指します。 PHP では、関数が宣言できるグローバル変数の最大数に制限はありません。

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

    例 12-2. グローバルの代わりに $GLOBALS を使用する

    1. $a = 1;
    2. $b = 2;

    3. function Sum()

    4. {
    5. $GLOBALS["b" ] = $GLOBALS["a"] + $GLOBALS["b"];
    6. }

    7. Sum();

    8. echo $b;
    9. ?>
    コードをコピー
    $GLOBALS 配列では、各変数は要素であり、キー名は変数名に対応し、値変数の内容は対応します。 $GLOBALS はスーパーグローバル変数であるため、$GLOBALS はグローバル スコープ内に存在します。次の例は、スーパーグローバル変数の使用を示しています:

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

    1. function test_global()
    2. {
    3. // ほとんどの事前定義変数は「スーパー」ではなく、関数内で変数を有効にするには「global」キーワードを使用する必要がありますローカルゾーンで。
    4. global $HTTP_POST_VARS;

    5. print $HTTP_POST_VARS['name'];

    6. // スーパーグローバルは、「global」を必要としません。 ' 声明。スーパーグローバルは PHP 4.1.0 で導入されました。

    7. print $_POST['name'];
    8. }
    9. ?>
    コードをコピー
    静的変数を使用する 変数スコープのもう 1 つの重要な機能は、静的変数です。静的変数はローカル関数スコープ内にのみ存在しますが、プログラムの実行がこのスコープを離れても、その値は失われません。以下の例を見てください:

    例 12-4. 静的変数の必要性を示します。

    1. function Test ()
    2. {
    3. $a = 0;
    4. echo $a;
    5. $a++;
    6. }
    7. ?> コードをコピー
    なし 各呼び出しで $a の値が 0 に設定され、「0」が出力されるため便利です。関数が終了すると変数 $a は存在しないため、変数を 1 つインクリメントする $a++ は効果がありません。このカウント値を失わないカウント関数を作成するには、変数 $a を静的として定義します:
    例 12-5. 静的変数の使用例

    function Test()
    {
      static $a = 0;
    1. echo $a;
    2. $a++;
    3. }
    4. ?>
    5. コードをコピー
    さて、 Test() 関数が呼び出されるたびに、$a の値が出力され、1 ずつ増加します。
    1 2 次のページ 最後のページ

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート