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
?>
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:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With