この記事では、PHP のグローバル変数 global の方法を詳しく紹介します。global 関数の使用方法を知りたい人は、この記事を参照してください。
変数のスコープは、変数が定義されているコンテキスト (つまり、その有効スコープ) です。ほとんどの PHP 変数にはスコープが 1 つだけあります。この単一スコープ スパンには、include および require によって導入されたファイルも含まれます。例:
コードは次のとおりです | コードをコピー |
$a = 1; |
この変数 $a は、インクルードされたファイル b.inc で有効になります。ただし、ユーザー定義関数では、ローカル関数スコープが導入されます。関数内で使用される変数は、デフォルトではローカル関数のスコープに制限されます。例:
コードは次のとおりです | コードをコピー |
$a = 1; /* グローバルスコープ */ 関数テスト() テスト(); |
echo ステートメントは変数 $a のローカル バージョンを参照しており、このスコープ内の値が割り当てられていないため、このスクリプトからの出力はありません。 PHP のグローバル変数は C 言語とは少し異なることに気づくかもしれません。C 言語では、ローカル変数によってオーバーライドされない限り、グローバル変数は関数内で自動的に有効になります。これにより問題が発生する可能性があり、誰かが誤ってグローバル変数を変更してしまう可能性があります。 PHP のグローバル変数を関数で使用する場合は、グローバル変数を宣言する必要があります。
今日、phpのグローバル変数が機能しないという問題に遭遇しました。
まず簡単なコード:
コードは次のとおりです | コードをコピー |
$a = 0 ; 関数 Test() { $a =1; } テスト(); エコー $a; ?> |
上記のコードの出力は 0 です。これは、関数本体 Test の $a 変数がデフォルトでローカル変数に設定されており、$a のスコープが Test 内にあるためです。コードを次のように変更します。
コードをコピー | |
コードは次のとおりです | コードをコピー |
関数 Test_Global() $a = 0 ; //B.php ファイル
関数 Test() |
出力が 0 になるのはなぜですか?!!
ユーザー定義関数では、ローカル関数スコープが導入されます。関数内で使用される変数は、デフォルトでローカル関数スコープに制限されます (include および require によってインポートされたファイル内の変数を含む)!
説明: A.php ファイルの Test_Global は定義されたサードパーティ関数です。この関数は include を使用して B.php ファイルの $a のグローバル グローバル変数をインポートするため、$a は Test_Global ローカル関数のスコープに制限されます。 B .php ファイル内の $a のスコープは、A.php 全体に影響を与えるのではなく、Test_Global 内にあります...
解決策:
1. ローカル機能からの離脱
コードは次のとおりです | コードをコピー |
//A.php ファイル
関数 Test_Global() //B.php ファイル
関数 Test() |
2. 優れたアクセサー
コードは次のとおりです | コードをコピー |
//A.php ファイル //B.php ファイル
関数 Set_Global(&$var) |