変数スコープは、変数が定義されているコンテキスト (つまり、その有効スコープ) です。 JavaScript には変数スコープの概念がありません。同様の概念としてスコープがあります。ただし、JavaScript は変数の宣言時に位置を参照する字句スコープを使用しますが、PHP には変数宣言がないため、変数は初めて値が割り当てられるときに変数を宣言することと同じになります。したがって、この 2 つは同じではありません。この記事では、PHP の変数スコープについて詳しく紹介します
スコープ スパン
ほとんどの PHP 変数のスコープは 1 つだけです。この別個のスコープ スパンには、 include および require によって導入されたファイルも含まれます
ここで、変数 $a は、インクルードされたファイル b.inc で有効になります
<?php $a = 1; include 'b.inc'; ?>
関数スコープ
ユーザー カスタム関数 では、ローカル関数 スコープが紹介されます。関数内で使用される変数は、デフォルトでローカル関数スコープに制限されます
以下のスクリプトは出力を生成しません。これは、echo ステートメントが変数 $a のローカル バージョンを参照しており、このスコープ内では変数が参照されていないためです。 assign a value
<?php $a = 1; /* global scope */ function Test() { echo $a; /* reference to local scope variable */ } Test(); ?>
globalKeyword
以下のスクリプトの出力は「3」となります。グローバル変数 a と
b が関数内で宣言された後は、いずれかの変数へのすべての参照がそのグローバル バージョンを指すようになります。 PHP には、関数で宣言できるグローバル変数の最大数に制限がありません
<?php $a = 1; $b = 2; function Sum() { global $a, $b; $b = $a + $b; } Sum(); echo $b;//3 ?>
グローバル スコープ内の変数にアクセスする 2 番目の方法は、特別な PHP カスタム $GLOBALS 配列を使用することです
GLOBALS は連想配列であり、それぞれ変数は要素であり、キー名は変数名に対応し、値は変数の内容に対応します。 GLOBALS がグローバル スコープに存在する理由は、GLOBALS がスーパーグローバル変数
<?php $a = 1; $b = 2; function Sum() { $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b']; } Sum(); echo $b;//3 ?>
事前定義変数
であるためです。すべてのスクリプトに対して、PHP は多数の事前定義変数を提供します。これらの変数は、すべての外部変数を組み込み環境変数として表し、エラー メッセージをリターン ヘッダーとして表します
以下は事前定義変数のリストです
超全局变量 — 超全局变量是在全部作用域中始终可用的内置变量 $GLOBALS — 引用全局作用域中可用的全部变量 $_SERVER — 服务器和执行环境信息 $_GET — HTTP GET 变量 $_POST — HTTP POST 变量 $_FILES — HTTP 文件上传变量 $_REQUEST — HTTP Request 变量 $_SESSION — Session 变量 $_ENV — 环境变量 $_COOKIE — HTTP Cookies $php_errormsg — 前一个错误信息 $HTTP_RAW_POST_DATA — 原生POST数据 $http_response_header — HTTP 响应头 $argc — 传递给脚本的参数数目 $argv — 传递给脚本的参数数组
事前定義変数のほとんどはスーパーグローバル変数ではなく、「グローバル変数」として使用する必要があります' キーワードを使用して関数のローカル スコープで使用できるようにします
スーパーグローバル変数
スーパーグローバル変数はどのスコープでも有効で、「グローバル」宣言は必要ありません
以下はスーパーグローバル変数のリストです
$GLOBALS $_SERVER $_GET$_POST $_FILES$_COOKIE $_SESSION $_REQUEST $_ENV
以上がPHP変数のスコープを理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。