Re: Using $$
| From: | LinuxManMikeC | Date: | Sun, 22 Nov 2009 19:32:33 +0000 |
| Subject: | Re: Using $$ | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-300034@lists.php.net to get a copy of this message | ||
On Fri, Nov 20, 2009 at 12:28 AM, Arno Kuhl <akuhl@telkomsa.net> wrote:
> -----Original Message-----
> From: Ford, Mike [mailto:M.Ford@leedsmet.ac.uk]
> Sent: 19 November 2009 07:06 PM
> To: php-general@lists.php.net
> Subject: RE: [PHP] Using $$
>
>> -----Original Message-----
>> From: Arno Kuhl [mailto:akuhl@telkomsa.net]
>> Sent: 19 November 2009 12:23
>>
>> I was looking at some old code that I'm convinced once worked but now
>> using
>> php5 it doesn't seem to work anymore.
>>
>> $input = "_REQUEST";
>> if (is_array($$input)) {
>> // do something
>> }
>
>
>> I tested something other than a superglobal and it works as expected.
>> What am I missing?
>
>
> Depends where you have this fragment of code, but possibly the big fat
> warning box towards the bottom of
> http://php.net/language.variables.variable?
>
> Cheers!
>
> Mike
> --
>
> Thanks for the link Mike, didn't know that. It doesn't say when this was
> introduced but I'm sure superglobal variable variables must have worked at
> some stage, because I've got code that once worked but doesn't anymore and
> it's due to this. There's always a workaround, just not as elegant.
>
> Cheers
> Arno
>
>
The problem got me curious, so I got hackin. The workaround in
functions and methods is to access it through the $GLOBALS superglobal
array. Here's some code I threw together in an interactive PHP
terminal.
php > function test_nowork($vn) { var_dump($$varname);}
php > test_nowork('_ENV');
NULL
php > function test_work($vn) { var_dump($GLOBALS[$vn]); }
php > test_work('_ENV');
array(##) {
["ORBIT_SOCKETDIR"]=>...
["SSH_AGENT_PID"]=>...
["GPG_AGENT_INFO"]=>...
["TERM"]=>...
["SHELL"]=>...
...