ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルのグローバル変数の詳細な説明

PHP_PHP チュートリアルのグローバル変数の詳細な説明

WBOY
WBOYオリジナル
2016-07-13 17:14:581056ブラウズ

この記事では、PHP のグローバル変数 global の方法を詳しく紹介します。global 関数の使用方法を知りたい人は、この記事を参照してください。

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

コードは次のとおりです コードをコピー

$a = 1;
「b.inc」を含める;
?>

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

コードは次のとおりです コードをコピー

$a = 1; /* グローバルスコープ */

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

テスト();
?>

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

今日、phpのグローバル変数が機能しないという問題に遭遇しました。

まず簡単なコード:

コードは次のとおりです コードをコピー
$a = 0 ;
関数 Test()
{
$a =1;
}
テスト();
エコー $a;
?>

上記のコードの出力は 0 です。これは、関数本体 Test の $a 変数がデフォルトでローカル変数に設定されており、$a のスコープが Test 内にあるためです。コードを次のように変更します。

コードは次のとおりですコードをコピー $a = 0 ;
関数 Test()
{
global $a;//関数本体のテストで使用される $a 変数をグローバル グローバル変数として宣言します
$a =1;
}
テスト();
エコー $a;
?>

関数本体Testで使用される$a変数をグローバルグローバル変数として宣言すると、$aはグローバル効果を持つため、出力は1になります。
上記の例は、グローバル変数の基本的な知識にすぎません。さらに複雑な変数を見てみましょう:

//A.php ファイル

コードは次のとおりです コードをコピー

関数 Test_Global()
{
「B.php」を含めます;
テスト();
}

$a = 0 ;
Test_Global();
エコー $a;
?> 

//B.php ファイル

関数 Test()
{
global $a;//関数本体で使用される $a 変数 Sum をグローバル グローバル変数として宣言します
$a =1;
}
?>

出力が 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()
{
テスト();
}
include 'B.php'; // ローカルの Test_Global 関数からインクルードを移動します
$a = 0 ;
Test_Global();
エコー $a;
?>

//B.php ファイル

関数 Test()
{
グローバル $a;
$a =1;
}
?>

2. 優れたアクセサー

コードは次のとおりです コードをコピー

//A.php ファイル
「B.php」を含める;
$a =0;
Set_Global($a);
エコー $a;
?> 

//B.php ファイル

関数 Set_Global(&$var)
{
$var=1;
}
?>

www.bkjia.com本当http://www.bkjia.com/PHPjc/628915.html技術記事この記事では、PHP のグローバル変数 global の方法を詳しく紹介します。global 関数の使用方法を知りたい人は、この記事を参照してください。 変数のスコープは、変数が定義されているコンテキストです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。