PHP变量名和花括号

3
这里曾经问过一个类似的问题:PHP变量像$ myvar-test不可用?。我已经阅读了PHP用户命名指南,其中写道:

变量名遵循PHP中其他标签的规则。有效的变量名以字母或下划线开头,后跟任意数量的字母、数字或下划线。作为正则表达式,它将被表示为:'[a-zA-Z_ \x7f-\xff] [a-zA-Z0-9_ \x7f-\xff] *'

我好奇的是这个答案,以及为什么这些解决方法可行:${'0x00'},或者这个:${'900'},还有这个:${'bad-name'}
我的问题有两个部分…为什么这样能行呢? 我的问题的第二部分:它们是否被视为有效变量还是被视为其他内容(我并不是在问它们是否可用,而是它们会被归类为什么)。

同时,您可以使用恶意变量变量来创建“无效”的变量名:$a = "123"; $$a = "hello";(这只是将值“hello”分配给变量“$ 123”,这是无效的,但它确实有效)。 - Carlos Campderrós
2个回答

1
根据此链接: http://cowburn.info/2008/01/12/php-vars-curly-braces/ 答案如下:
  • 问题1:因为花括号中的内容将是$_GLOBALS数组中的键值对,不仅仅是一个变量名。
  • 问题2:它们将是脚本$Globals的一部分,但您不能使用常规的$var符号访问它们。

0

我相信解析器实际上并没有验证 { } 内的表达式。尽管如此,PHP 在内部使用 HashTable 来存储变量,所以任何字符串或数字都是有效的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接