我一直在研究PHP一段时间,我遇到了正式称为Variable Variables的变量操作功能。基本语法是:
$foo = 'bar';
$$foo = 'foo2';
这两个陈述的结果是$foo
等于bar
,而新变量$bar
等于foo2
。
我希望如果变量$foo
包含一个数字,这会引发某种错误。如果$foo
的值最初设置为无效的变量名,会发生什么?会抛出什么错误?
答案 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};
?>