ホームページ  >  記事  >  バックエンド開発  >  PHP のグローバルと GLOBALS に関するいくつかの関連問題

PHP のグローバルと GLOBALS に関するいくつかの関連問題

WBOY
WBOYオリジナル
2016-06-13 13:04:42849ブラウズ

php
のグローバルと GLOBALS に関するいくつかの問題

まず簡単な例を見てみましょう

$a = 'scnjl';

function test() {
	global $a;
	unset($a);
}

test();
var_dump($a);

function test1() {
	unset($GLOBALS['a']);
}

test1();
var_dump($a);

?ここでの出力結果は次のとおりです:

string(5) "scnjl" NULL

関数内で global が使用される場合、変数 $a を直接使用するのではなく、$a の値を指す変数をコピーすることがわかります。そのため、グローバル変数 $a が設定されていない場合、グローバル変数 $a はunset であり、$GLOBALS['a'] はグローバル変数 $a を直接表します。

これがグローバルとグローバルの違いです。

?

今日何か作業をしていたら、クラス内で呼び出したときにグローバル変数に値が入っていないことが分かりました。原因を調べてみると、クラスに含まれるファイルに値が含まれていることが分かりました。そのファイルは別の関数によって使用されているため、グローバル変数ではありません。関数がインクルードされるため、クラス ファイル内のインクルード ファイル内の変数もローカル変数になります。

例:

test008.php

include 'test009.php';

Class A {
	var $name;

	function __construct() {

	}

	function A() {
		$this->__construct();
	}

	function test() {
		var_dump($GLOBALS['var']);
	}

	function test1() {
		$this->test();
	}
}

$a = new A();

?test009.php

$var = 'scnjl';

?test010.php

class xx {

	function __construct() {

	}
	
	function test() {
		include 'test008.php';
		$a->test1();
	}
}

$xx = new xx();

$xx->test();

?これは単なる例です。実際には、test009.php の値を test008.php に直接入れることができます。

ここではnullが出力されます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。