Re: weird global issue [message #185004 is a reply to message #185003] |
Sun, 23 February 2014 20:49 |
Christoph Michael Bec
Messages: 207 Registered: June 2013
Karma:
|
Senior Member |
|
|
The Natural Philosopher wrote:
> On 23/02/14 19:16, Ben Bacarisse wrote:
>> The Natural Philosopher <tnp(at)invalid(dot)invalid> writes:
>>
>>> Consider
>>> <?php
>>> $x=array();
>>>
>>> function foo()
>>> {
>>> global $x;
>>> foreach($x as $p) // fails with invalid type
>>> {
>>> }
>>> }
>>> ?>
>>
>> foo isn't called in this example, so what you've posted is not the
>> actual code that's failing. The code will fail if the call to foo comes
>> too early, specifically before the assignment happens, but maybe you can
>> post a full example that fails?
>>
>
> the call to foo is after the variable is initialised.
>
> I tested it by echoing gettype($x); both after initialising and inside
> the function
>
> It was fine outside the function and then returned NULL inside it.
>
> I suspect the problem is in the way I am, 'eval' ing the code.
Might have been a good idea to mention this in the first place. :)
> Provably the eval interpreter doesnt quite handle scope in the same way
> that PHP itself does. And adding a global $x 'passes it up' to the
> calling program.
Actually, eval() as well as include() don't change the situation, unless
they're placed in a function, as both language constructs evaluate the
code in the scope of the code using them. Apparently that is happening
in your case.
--
Christoph M. Becker
|
|
|