-
- function function_name() {
- global $var;
- }
- $var=20;
- function_name() // 関数呼び出し
- ?>
-
コードをコピー
; この例では、関数内の $var は関数外の $var と同じになりました。これは、変数 $var の値がすでに 20 であり、この値が関数内で変更されると、関数外の $var の値も変更されることを意味します。
変数スコープを回避するもう 1 つの方法は、スーパーグローバル変数 ($_GET、$_POST、$_REQUEST など) を利用することです。これらの変数は関数内で自動的にアクセスできます (したがって、これらはスーパーグローバル変数です)。 $GLOBALS 配列に要素を追加して、関数内で使用できるようにすることもできます。
関数内でグローバル変数を使用しないことが最善です。関数を設計するときは、必要に応じてすべての値をパラメータとして受け入れ、必要に応じて任意の値を返すようにする必要があります。関数内でグローバル変数に依存すると、コンテキスト依存性が高まるため、有用性が低くなります。
PHP の変数には主に、組み込みスーパーグローバル変数、一般変数、定数、グローバル変数、静的変数などが含まれます
組み込みスーパーグローバル変数は、スクリプト内のどこでも使用および表示できます。つまり、PHP ページ内の値の 1 つを変更すると、他の PHP ページで使用されたときにその値も変更されます。
一度宣言すると、定数はグローバルに見えるようになります。つまり、関数の内部と外部で使用できますが、これは 1 つのページに含まれる PHP スクリプト (include と include_once で含めた PHP スクリプトを含む) にのみ限定されます。他のページでは使用できなくなります。
スクリプト内で宣言されたグローバル変数は、スクリプト全体で参照できますが、関数内では参照できません。関数内の変数がグローバル変数と同じ名前である場合、関数内の変数が優先されます。
関数内で使用される変数がグローバル変数として宣言されている場合、その名前はグローバル変数の名前と一致している必要があります。この場合、前の問題を回避するために、関数内で関数の外にあるグローバル変数を使用できます。問題は、関数内の変数が外部グローバル変数と同じ名前を持ち、外部変数をオーバーライドします。
関数内で作成され、static として宣言された変数は、関数の外では見ることができませんが、関数の複数回の実行中に値を維持できます。最も一般的な状況は、関数の再帰実行中です。
関数内で作成された変数は関数に対してローカルであり、関数が終了すると存在しなくなります。
スーパーグローバル変数の完全なリストは次のとおりです。
-
- $a = 4;
- function sendValue($x)
- {
- echo $x;
- }
- sendValue($a)?>
-
コードをコピー ; 説明: $a は関数の外で定義されており、関数はパラメーターを定義します。関数が呼び出されるとき、$a はパラメーターの形式で渡されます。したがって、上記のコードは正常に実行できます。
- <?php
- $ a = 4;関数が呼び出されるとき、$a をパラメータとして渡すことはできません。したがって、上記のコードは正常に実行できません。
変数スコープ
変数のスコープは、変数が定義されているコンテキストです (翻訳者: 単刀直入に言うと、変数の有効スコープです)。ほとんどの PHP 変数にはスコープが 1 つだけあります。この単一スコープ スパンには、include および require によって導入されたファイルも含まれます。例:
- $a = 1;
- include "b.inc";
?>
コードをコピー
ここでの変数 $a は、インクルード ファイル b で有効になります。株式会社ただし、ユーザー定義関数では、ローカル関数スコープが導入されます。関数内で使用される変数は、デフォルトではローカル関数のスコープに制限されます。例:
-
-
$a = 1; /* グローバルスコープ */
function Test()
{ echo $a; /*ローカル スコープ変数への参照 */ }Test(); ?>
コードをコピー-
-
echo ステートメントは変数 $a のローカル バージョンを参照しており、このスコープ内の値が割り当てられていないため、このスクリプトからの出力はありません。 PHP のグローバル変数は C 言語とは少し異なることに気づくかもしれません。C 言語では、ローカル変数によってオーバーライドされない限り、グローバル変数は関数内で自動的に有効になります。誰かが不用意にグローバル変数を変更する可能性があるため、問題が発生する可能性があります。 PHP のグローバル変数を関数で使用する場合は、グローバル変数を宣言する必要があります。
グローバルキーワード
まず、グローバルの使用例:
例 12-1. グローバルの使用
-
-
- $a = 1;
- $b = 2;
function Sum()
- {
- global $a, $b ;
$b = $a + $b;
- }
Sum();
- echo $b;
- ?> ;
-
-
コードをコピー
上記のスクリプトの出力は「3」になります。グローバル変数 $a と $b は関数内で宣言されており、任意の変数のすべての参照変数はグローバル変数を指します。 PHP では、関数が宣言できるグローバル変数の最大数に制限はありません。
グローバル スコープ内の変数にアクセスする 2 番目の方法は、特別な PHP カスタム $GLOBALS 配列を使用することです。前の例は次のように記述できます:
例 12-2. グローバルの代わりに $GLOBALS を使用する
-
- $a = 1;
- $b = 2;
function Sum()
- {
- $GLOBALS["b" ] = $GLOBALS["a"] + $GLOBALS["b"];
- }
Sum();
- echo $b;
- ?>
-
-
-
コードをコピー
$GLOBALS 配列では、各変数は要素であり、キー名は変数名に対応し、値変数の内容は対応します。 $GLOBALS はスーパーグローバル変数であるため、$GLOBALS はグローバル スコープ内に存在します。次の例は、スーパーグローバル変数の使用を示しています:
例 12-3. スーパーグローバル変数とスコープを示す例
-
- function test_global()
- {
- // ほとんどの事前定義変数は「スーパー」ではなく、関数内で変数を有効にするには「global」キーワードを使用する必要がありますローカルゾーンで。
- global $HTTP_POST_VARS;
print $HTTP_POST_VARS['name'];
// スーパーグローバルは、「global」を必要としません。 ' 声明。スーパーグローバルは PHP 4.1.0 で導入されました。
- print $_POST['name'];
- }
- ?>
-
-
-
コードをコピー
静的変数を使用する
変数スコープのもう 1 つの重要な機能は、静的変数です。静的変数はローカル関数スコープ内にのみ存在しますが、プログラムの実行がこのスコープを離れても、その値は失われません。以下の例を見てください:
例 12-4. 静的変数の必要性を示します。
- function Test ()
- {
- $a = 0;
- echo $a;
- $a++;
- }
- ?> コードをコピー
-
-
なし 各呼び出しで $a の値が 0 に設定され、「0」が出力されるため便利です。関数が終了すると変数 $a は存在しないため、変数を 1 つインクリメントする $a++ は効果がありません。このカウント値を失わないカウント関数を作成するには、変数 $a を静的として定義します:
例 12-5. 静的変数の使用例
function Test(){ static $a = 0;- echo $a;
- $a++;
- }
- ?>
-
-
-
- コードをコピー
-
-
さて、 Test() 関数が呼び出されるたびに、$a の値が出力され、1 ずつ増加します。 1 2 次のページ 最後のページ
|