什么时候会在PHP中发生?

时间:2009-12-25 04:39:32

标签: php scope

这是一个人为的例子

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

test();

//here $a will report undefined variable

echo $a;

我现在以某种方式遇到这个问题,但我不能轻易地重现它!

修改

我的意思是include之类的操作或类似时的操作

3 个答案:

答案 0 :(得分:1)

您最近编辑过,说当您'包含'文件时会发生这种情况。

文件和全球化并没有真正相处。你实际上必须全局输出并进入文件。所以如果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;之后调整test() 。但是,如果您在与echo $a不同的文件中定义AND {{1}},则会导致全局错误。

我不确定这是否能回答你的问题,但是,这是包含系统中的缺陷。

答案 1 :(得分:0)

在您提到的地方获得未定义变量的一种方法是,当您$a本地化为test()而没有global $a;时宣言。

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

test();

//here $a will report undefined variable

echo $a;
?>

另一个可能是你在<{strong> test()之后调用函数echo

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


//here $a will report undefined variable

echo $a;

test();
?>

变量a在打印时尚未初始化,并将导致Notice: Undefined variable: a

您提供的代码段应该可以正常使用。在您回显$a时,它不再是未定义的,并且在函数test()中被赋予了一个值。

答案 2 :(得分:0)

如果你在test()中执行此操作,可能会发生这种情况:

unset($GLOBALS['a']);

我怀疑你是不是,也许你可以更新你的帖子,以提供更符合你情况的代码样本。