Reply to Re: Variable scope mystery

Your name:

Reply:


Posted by Maarten on 11/18/05 19:28

Yes, that's it! So, a variable declared inside a function isn't available
inside nested function even while you are calling it in (global). You'll
have to declare it global in the main function first. This can cause
problems though, as there might be a variable with the same name outside the
main function that you do not want to access. See what I mean? The solution
is obvious of course, but sometimes you just don't know what variables live
out there, do you?


"Oli Filth" <catch@olifilth.co.uk> wrote in message
news:YTnff.12242$fN5.7154@newsfe6-gui.ntli.net...
> daemon said the following on 18/11/2005 16:43:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> Maarten wrote:
>>
>>>Here is a nice problem. I have two scripts, one calling the other with
>>>via an include. The script that is included contains a variable, a
>>>function and a call to that function. The variable needs to be accessible
>>>to the function, so I declare it having a global scope. Then I execute
>>>the function, which should echo the value of the variable. Contrary to
>>>what I expected, the variable isn't there.
>>>
>>>The code of the 2 programs is:
>>>
>>>script1.php
>>><?php
>>>function blah()
>>>{
>>> include("script2.php");
>>>}
>>>
>>>blah();
>>>?>
>>>
>>>script2.php
>>><?php
>>>$foo = "bar";
>>>
>>>function blahblah()
>>>{
>>> global $foo;
>>> echo $foo;
>>>}
>>>
>>>blahblah();
>>>?>
>>>
>>>I can't see anything wrong with the way I set this up, even more since a
>>>call to script2.php does exactly what it's suppossed to do: echo the
>>>value. What's going on here is beyond me. Anybody has a clue?
>>>
>>>Kind regards, Maarten
>>>
>>
>>
>> I can... you can't expect to include another function within blah();
>
> Yes you can.
>
> The problem is that by declaring $foo = "bar" in what intuitively looks
> like the global scope within script2.php, it's actually being declared in
> the scope of blah(), and therefore isn't a global variable, and therefore
> can't be accessed within blahblah().
>
> Change script2.php to:
>
> <?php
> global $foo;
> $foo = "bar";
>
> function blahblah()
> {
> global $foo;
> echo $foo;
> }
>
> blahblah();
> ?>
>
>
>
> --
> Oli

[Back to original message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация