变量变量 - 错误和有效性

时间:2014-12-21 02:42:34

标签: php variables

我一直在研究PHP一段时间,我遇到了正式称为Variable Variables的变量操作功能。基本语法是:

$foo = 'bar';
$$foo = 'foo2';

这两个陈述的结果是$foo等于bar,而新变量$bar等于foo2

我希望如果变量$foo包含一个数字,这会引发某种错误。如果$foo的值最初设置为无效的变量名,会发生什么?会抛出什么错误?

2 个答案:

答案 0 :(得分:2)

不会抛出任何错误。

PHP Docs on Variables表示变量必须与以下正则表达式匹配:

[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

但是此规则仅由 解析器强制执行。 PHP支持名为any的变量,解析器只执行某些命名约定。

您可以自己查看:

$foo = '1';
$$foo = 'baz';
print_r(get_defined_vars());
/*
Prints:
Array
(
 ...
 [foo] => 1
 [1] => baz
)
*/

答案 1 :(得分:1)

您可以使用这个简单的脚本尝试:

<?php
    $foo='1';
    $$foo='hello world';
    echo $$foo;
?>

和这一个:

<?php
    $foo='1';
    $$foo='hello world';
    echo $1;
?>

基本上,如果你这样做,不会抛出任何错误。但是,您必须以$$foo访问新变量,而不是$1。如果你运行这两个脚本,第一个将说“hello world”,第二个将在日志文件中给出错误。

编辑:感谢@FabrícioMatté说您可以这样访问:

<?php
    $foo='1';
    $$foo='hello world';
    echo ${1};
?>