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

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

WBOY
リリース: 2016-06-13 13:04:42
オリジナル
910 人が閲覧しました

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が出力されます。

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