Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is this a php variable variable bug?

Tags:

variables

php

Is there a logical explanation to this?

<?php  
$$a = 'hello world';  
echo $$a; //displays hello world  
echo $$aa; //displays hello world  
echo $$aaa; //displays hello world  
?>
like image 543
Dami Avatar asked Jul 23 '10 13:07

Dami


1 Answers

When doing

$$a = 'foo';

you are saying take the value of $a. Convert it to string. Use the String as variable name to assign 'foo' to it. Since $a is undefined and returns NULL, which when typecasted to String is '', you are assigning the variable ${''};

echo ${''}; // 'foo'

Ironically, you can do

${''} = 'foo'; /* but not */ $ = 'foo';

And you can do

${''} = function() { return func_get_arg(0); };
echo ${''}('Hello World');
// or
echo $$x('Hello World');

which would trigger a notice about $x being undefined but output Hello World then. Funny enough, the following doesnt work:

${''} = function() { return func_get_arg(0); };
echo $x('Hello World');

Because it triggers Fatal error: Function name must be a string. Quirky :D

Since the PHP manual says

Variable names follow the same rules as other labels in PHP. A valid variable name starts with a letter or underscore, followed by any number of letters, numbers, or underscores.

I'd consider being able to assign an empty named variable a bug indeed.

There is a somewhat related bug filed for this already:

  • http://bugs.php.net/bug.php?id=39150
like image 63
Gordon Avatar answered Oct 08 '22 17:10

Gordon