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