开发者

When will this happen in PHP?

This is a contrived example

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

test();

//here $a will report undefined variable

echo $a;

I meet this problem now by somehow,but I c开发者_如何学Can't reproduce it in an easy way!

EDIT

I mean operations like include or alike by when


You recently edited to say that is happens when you 'include' a file.

Files and Globaling don't really get along. You actually have to Global out and into a file. So if test1.php had this code

$a = 5;

and test2.php had this code:

$a = 3;

and test3.php had this code:

$a = 10;

and finally (Yes, too many files) testMaster.php had this code

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

There would be an undefined variable error. You would have to go an individually global the variable in each file in order for them all to get set.

Now, I'm pretty sure this wouldn't affect the code you gave us, or if function test() was included, and then called test(); and right after it you put echo $a;. But if you define AND call test() in a separate file than you echo $a, it would cause a globaling error.

I'm not sure if this answers your question, but yes, this is a flaw in the include system.


One way for you getting the undefined variable at the place you've mentioned is when you make $a local to function test() by not having the global $a; declaration.

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

test();

//here $a will report undefined variable

echo $a;
?>

The other could be you are calling the function test() after the echo:

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


//here $a will report undefined variable

echo $a;

test();
?>

The variable a has not been initialized when its being printed and will result in Notice: Undefined variable: a

The snippet you've provided should work just fine. At the point where you are echoing $a, its no more undefined and has been given a value in the function test().


It can happen if you do this inside test():

unset($GLOBALS['a']);

I doubt you are though, maybe you can update your post to provide a code sample that better resembles your situation.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜