对此有合理的解释吗?
<?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.
已经为此提交了一些相关的错误:
如果你试试
$$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
| 归档时间: |
|
| 查看次数: |
409 次 |
| 最近记录: |