2009-12-25 33 views
-1

這是一個人爲的例子PHP會在何時發生?

function test() 
{ 
    global $a; 
    $a=2; 
} 

test(); 

//here $a will report undefined variable 

echo $a; 

我現在滿足這一問題,通過某種方式,但我不能以簡單的方式重現!

編輯

我的意思是像include或類似的操作由當你得到未定義的變量在你提到的地方

+0

代碼對我來說工作得很好...... – 2009-12-25 04:45:22

+0

是的,所以問題是'何時'它不起作用,我不能以簡單的方式重現它! – user198729 2009-12-25 04:46:10

+0

正如其他人所指出的那樣,這是對「全球」的濫用。 'global'的目的是在一個函數的命名空間中創建一個已經定義的全局變量,而不是在全局命名空間中創建一個新變量。 – GZipp 2009-12-25 13:37:39

回答

0

的一種方法是,當你做$a本地功能test()通過沒有global $a;聲明。

<?php 
function test() 
{ 
    //global $a; 
    $a=2; 
} 

test(); 

//here $a will report undefined variable 

echo $a; 
?> 

其他可能是你調用的函數test()echo

<?php 
function test() 
{ 
    global $a; 
    $a=2; 
} 


//here $a will report undefined variable 

echo $a; 

test(); 
?> 

的變量尚未被打印的時候初始化,並會導致Notice: Undefined variable: a

您提供的代碼段應該可以正常工作。在你迴應$a的地方,它沒有更多的未定義,並已在函數test()中給出了一個值。

+0

這不是我遇到的問題。函數調用後有'global'聲明和回顯。 – user198729 2009-12-25 05:13:21

1

你最近編輯說這是發生在你'包括'一個文件。

文件和全球化並不真正相處。你實際上不得不將Global放到一個文件中。所以,如果test1.php有這個代碼

$a = 5; 

和test2.php過這樣的代碼:

$a = 3; 

和test3.php過這樣的代碼:

$a = 10; 

最後(是的,太多文件)testMaster.php有這個代碼

include 'test1.php'; 
include 'test2.php'; 
include 'test3.php'; 
echo $a; 

會有一個未定義的變量錯誤。你將不得不在每個文件中單獨使用全局變量,以便全部設置。

現在,我敢肯定,這會不會影響你給我們,或者如果function test()被列入,然後叫test();和後馬上你把echo $a;代碼。但是,如果您定義並在與您的echo $a不同的文件中調用test(),則會導致全局錯誤。

我不確定這是否回答您的問題,但是,這是包含系統中的缺陷。

+0

它在這裏很好地工作,輸出10. – user198729 2009-12-25 06:19:02

0

如果你這樣做內部測試(它可能發生):

unset($GLOBALS['a']); 

我懷疑你是,雖然,也許你可以更新您的文章提供了代碼示例,更好地類似於您的情況。

+0

不,我沒有做這種愚蠢的事情。 – user198729 2009-12-25 06:19:42

相關問題