Re: Variable scope mystery



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@xxxxxxxxxxxxxx> wrote in message
news:YTnff.12242$fN5.7154@xxxxxxxxxxxxxxxxxxxxxxx
> 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


.



Relevant Pages

  • Re: How to implement sizeof operator
    ... project i want to implemnent my own sizeof operator function (like ... Hint: macros can declare variables. ... difference between foo and foo, where the first foo was declared using ... No, at compile-time, it can be done in pure ISO C. ...
    (comp.lang.c)
  • Re: Subroutines with &
    ... print foo(); ... In addition to the expected "Howdy", it produces the following warning: ... You could declare the sub above the ... Or, you could forward declare the sub, like this: ...
    (comp.lang.perl.misc)
  • Re: Calling functions declared in an entity
    ... In VHDL it is possible to declare the following entity: ... entity Foo is ... ARCHITECTURE rtl OF ent_item_decl IS ...
    (comp.lang.vhdl)
  • Re: Where to declare Variables
    ... $foo = TRUE; ... easy and not declare variables. ... initializing them before the first read-access. ... The correct setting ...
    (comp.lang.php)
  • Re: Function declarations & use of static functions
    ... > mainand foo(), respectively defined in main.c and foo.c. ... > declare foo() within main.c so maincould call it? ... int main ... dsk_readSectorin disk.h for external consumers. ...
    (comp.lang.c)