变量变量中的美元符号是否被视为取消引用运算符?

Is the dollar sign in a variable variable considered the dereference operator?

提问人:Cyclone 提问时间:9/7/2011 更新时间:10/30/2014 访问量:1267

问:

我正在向某人展示如何在 PHP 中创建变量变量变量(我只建议永远不要使用它们,这是可怕的做法,如果你在实际生产代码中使用变量变量变量,你就是一个坏人),他们问美元符号在这种情况下是否充当取消引用运算符。

它实际上并没有创建对其他变量的引用,所以我真的不认为它是 deref 操作。变量的文档甚至根本没有提到引用。

谁是对的?我不认为变量变量正在创建引用,因此美元符号不是取消引用运算符。

以下是一些示例代码,供您观看乐趣(或内容带来痛苦):

<?php

$a = 'c';
$b = 'a';
$c = 'hello';

echo($$$b); //hello
php 变量

评论

1赞 Oliver Charlesworth 9/7/2011
文档中没有这样引用它们。变量的语义很清楚。那么为什么这很重要呢?
3赞 Marc B 9/7/2011
如果你的意思是像 C 样式类型一样取消引用,那么它有点排序,也许不是一回事。C 取消引用是“获取存储在此变量中的数字并将其视为内存地址”。这个“取消引用”是PHP是“获取存储在这个变量中的字符串,并将其用作变量名”。*x
0赞 Cyclone 9/7/2011
@personwhovotedtoclose:这绝对是一个真正的问题,关于语言是如何工作的。
1赞 Oliver Charlesworth 9/7/2011
@Cyclone:这并不是一个关于语言如何工作的问题,因为很明显你已经知道这个代码示例是如何工作的!你真的只是在问“用这个另一个名字来称呼这种语言结构是否有效?
1赞 Gordon 9/7/2011
PHP 中没有取消引用运算符这样的东西;既不在运算符列表中,也不在解析器标记列表中。如果遇到 a,解析器将贪婪地获取尽可能多的标记来形成有效的变量名称,仅此而已。$

答:

4赞 webbiedave 9/7/2011 #1

变量中的美元符号是否被视为取消引用 算子?

不。PHP 没有取消引用运算符。

不应将变量变量视为取消引用,而应将其视为通过字符串访问符号树。例如:

$bar = 1;
echo ${'bar'};

您可以使用变量而不是字符串文本来动态执行此操作:

$bar = 1;
$foo = 'bar';
echo ${$foo};

PHP 语法允许您删除大括号,但这仍然是通过字符串访问符号表的问题。不涉及引用/取消引用。

0赞 john borelli 10/30/2014 #2

不,它不是去引用任何东西......如果有的话,那就是引用存储变量名称的引用来引用存储变量名称的存储值。是双重引用还是引用的引用.....de-ref 意味着一个变量是另一个变量子集的一部分。