weird global issue [message #184992] |
Sun, 23 February 2014 18:33  |
The Natural Philosoph
Messages: 993 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
Consider
<?php
$x=array();
function foo()
{
global $x;
foreach($x as $p) // fails with invalid type
{
}
}
?>
---------
<?php
$x=array();
global $x;
function foo()
{
global $x;
foreach($x as $p) // works??
{
}
}
?>
---------
This behaviour seems only limited to arrays...
--
Ineptocracy
(in-ep-toc’-ra-cy) – a system of government where the least capable to
lead are elected by the least capable of producing, and where the
members of society least likely to sustain themselves or succeed, are
rewarded with goods and services paid for by the confiscated wealth of a
diminishing number of producers.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Re: weird global issue [message #185344 is a reply to message #185338] |
Wed, 19 March 2014 21:21  |
Scott Johnson
Messages: 196 Registered: January 2012
Karma: 0
|
Senior Member |
|
|
On 3/19/14, 10:16 AM, The Natural Philosopher wrote:
> On 19/03/14 15:26, Arno Welzel wrote:
>> Am 23.02.2014 21:35, schrieb The Natural Philosopher:
>>> On 23/02/14 18:59, Christoph Michael Becker wrote:
>>>> The Natural Philosopher wrote:
>>>>
>>>> > Consider
>>>> > <?php
>>>> > $x=array();
>>>> >
>>>> > function foo()
>>>> > {
>>>> > global $x;
>>>> > foreach($x as $p) // fails with invalid type
>>>> > {
>>>> > }
>>>> > }
>>>> > ?>
>>>> > ---------
>>>> >
>>>> > <?php
>>>> > $x=array();
>>>> > global $x;
>>>> > function foo()
>>>> > {
>>>> > global $x;
>>>> > foreach($x as $p) // works??
>>>> > {
>>>> > }
>>>> > }
>>>> > ?>
>>>> > ---------
>>>> > This behaviour seems only limited to arrays...
>>>>
>>>> No (unless there's a bug in a particular PHP version). Your first code
>>>> sample works fine without even a notice.
>>>>
>>>
>>> It doesn't here, but the code is being 'eval'ed' ...
>>
>> That's one of the reasons, why it is NOT "nice" to store code in a
>> database and then use eval() to execute it.
>>
>>
>>
> actually it isn't.
>
> It was because the global was essentially being declared in a
> subroutine, which I had forgotten.
>
>
>
>
I hate when I do that...so much lost time.
Scotty
|
|
|