2009-12-25 48 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

相关问题