这是一个php变量变量bug吗?

Dam*_*ami 14 php variables

对此有合理的解释吗?

<?php  
$$a = 'hello world';  
echo $$a; //displays hello world  
echo $$aa; //displays hello world  
echo $$aaa; //displays hello world  
?>
Run Code Online (Sandbox Code Playgroud)

Gor*_*don 12

做的时候

$$a = 'foo';
Run Code Online (Sandbox Code Playgroud)

你是说取值的$a.将其转换为字符串.使用String作为变量名称分配'foo'给它.因为$a是未定义并返回NULL,当它被类型化为String时'',你正在分配变量${''};

echo ${''}; // 'foo'
Run Code Online (Sandbox Code Playgroud)

具有讽刺意味的是,你可以

${''} = 'foo'; /* but not */ $ = 'foo';
Run Code Online (Sandbox Code Playgroud)

你可以做到

${''} = function() { return func_get_arg(0); };
echo ${''}('Hello World');
// or
echo $$x('Hello World');
Run Code Online (Sandbox Code Playgroud)

这将触发关于$x未定义但输出的通知Hello World.有趣的是,以下不起作用:

${''} = function() { return func_get_arg(0); };
echo $x('Hello World');
Run Code Online (Sandbox Code Playgroud)

因为它触发致命错误:函数名称必须是字符串.古怪:D

自PHP手册说

变量名称遵循与PHP中其他标签相同的规则.有效的变量名称以字母或下划线开头,后跟任意数量的字母,数字或下划线.

我认为能够确实为一个空的命名变量分配一个bug.

已经为此提交了一些相关的错误:


mic*_*ael 8

如果你试试

$$a = 'hello world';
echo $$a; //displays hello world
echo $$aa; //displays hello world
echo $$aaa; //displays hello world


die( "<pre>" . print_r( get_defined_vars(), true ) . "</pre>" );
Run Code Online (Sandbox Code Playgroud)

您可以看到它已经注册了一个没有名称的变量,所以是的,根据PHP的命名约定,这将是一个bug