ホームページ > バックエンド開発 > PHPチュートリアル > PHPにおけるグローバルと¥GLOBALS[]の違い

PHPにおけるグローバルと¥GLOBALS[]の違い

WBOY
リリース: 2016-06-13 13:24:08
オリジナル
892 人が閲覧しました

PHP におけるグローバルと¥GLOBALS[] の違い

PHP プログラムを開発する際、グローバルデータを使用することは避けられません。

グローバル変数 もその 1 つであり、この考え方には依然として議論の余地があります。不適切に使用すると、構造がわかりにくくなり、デバッグが難しくなります。はさらに難しいですが、その便利さは否定できません。これが、PHP が グローバル変数 global を使用する理由です。…

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

最初に簡単なコードを示します:

1 <?php

2 $a = 0 ;

3 function Test()

4 {

5 $a =1;

6 }

7 Test();

8 echo $a;

9 ?>

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

01 <?php

02 $a = 0 ;

03 function Test()

04 {

05 global $a;//申明函数体Test内使用的$a变量为global全局变量

06 $a =1;

07 }

08 Test();

09 echo $a;

10 ?>

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

01 //A.php 文件
02  
03 <?php

04 function Test_Global()

05 {

06 include 'B.php';

07 Test();

08 }

09

10 $a = 0 ;

11 Test_Global();

12 echo $a;

13 ?> 
14  
15 //B.php 文件
16  
17 <?php

18 function Test()

19 {

20 global $a;//申明函数体Sum内使用的$a变量为global全局变量

21 $a =1;

22 }

23 ?>

出力が 0 なのはなぜですか?!!

ユーザー定義関数では、ローカル関数スコープが導入されます。 関数内で使用される変数は、デフォルトでローカル関数スコープに制限されます (include および require によってインポートされたファイル内の変数を含む)!
説明: A.php ファイル内の Test_Global は、定義されたサードパーティ関数です。この関数は、include を使用して、B.php ファイル内の $a のグローバル グローバル変数をインポートします。そのため、$a は、 Test_Global ローカル 関数スコープ内なので、B.php ファイル内の $a のスコープは、A.php 全体に影響を与えるのではなく、Test_Global 内にあります....

解決策:

1. ローカル機能からの離脱

01  //A.php 文件
02  
03 <?php

04 function Test_Global()

05 {

06 Test();

07 }

08 include 'B.php'; //将include 从局部Test_Global函数中移出

09 $a = 0 ;

10 Test_Global();

11 echo $a;

12 ?> 
13  
14 //B.php 文件
15  
16 <?php

17 function Test()

18 {

19 global $a;

20 $a =1;

21 }

22 ?>

2. 優れたアクセサー

1  //A.php 文件
01 <?php

02 include 'B.php';

03 $a =0;

04 Set_Global($a);

05 echo $a;

06 ?> 
07  
08 //B.php 文件
09  
10 <?php

11 function Set_Global(&$var)

12 {

13 $var=1;

14 }

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