PHP - $ 和 $$ 变量
我们知道 PHP 使用在变量名前面加上 “$” 符号的约定。PHP 还可以通过在名称前加上两个美元符号 ($$) 来声明动态变量。可以动态设置和使用变量变量(或动态变量)。
普通变量的声明是这样的 -
$a = 'good';
动态变量采用普通变量的值,并将其视为变量的名称。在上面的例子中,通过使用两个美元符号 “$$” - “good” 可以用作变量的名称 -
$$a = 'morning';
我们现在有两个变量:“$a”和“$$a”,内容为“morning”。因此,以下 echo 语句将产生相同的输出 -
echo "$a {$$a}";
echo "$a $good";
两者都产生相同的输出 -
示例 1
看看下面的例子 -
<?php
$a = 'good';
$$a = 'morning';
echo "$a {$$a}\n";
echo "$a $good";
?>
它将产生以下输出 -
good morning
示例 2
让我们看另一个例子 -
<?php
$x = "foo";
$$x = "bar";
echo "Value of x = " .$x . "\n";
echo 'Value of $$x = ' . $$x . "\n";
echo 'Value of foo = ' . $foo;
?>
在这里,您将获得以下输出 -
Value of $$x = bar
Value of foo = bar
使用多个 “$” 符号
请注意,“$” 符号的使用不限于两个。可以为任意数量的美元符号添加前缀。
假设有一个变量 “$x”,其值为 “a”。接下来,我们定义 $$x='as',然后 “$$x” 和 “$a” 将具有相同的值。同样,语句 $$$x='and' 实际上声明了一个值为 'and' 的 “$as” 变量。
例这是一个完整的示例,显示了多个 “$” 符号的使用。
<?php
$php = "a";
$lang = "php";
$World = "lang";
$Hello = "World";
$a = "Hello";
echo '$a= ' . $a;
echo "\n";
echo '$$a= ' . $$a;
echo "\n";
echo '$$$a= ' . $$$a;
echo "\n";
echo '$$$$a= ' . $$$$a;
echo "\n";
echo '$$$$$a= ' . $$$$$a;
?>
当您运行此代码时,它将生成以下输出 -
$$a= World
$$$a= lang
$$$$a= php
$$$$$a= a
将动态变量与数组一起使用
将动态变量与数组一起使用可能会导致某些不明确的情况。对于数组 “a”,如果你写 $$a[1],那么解析器需要知道你是引用 “$a[1]” 作为变量,还是希望 “$$a” 作为变量,然后是该变量的 [1] 索引。
要解决这种歧义,请对第一种情况使用 ${$a[1]},对第二种情况使用 ${$a}[1]。
例请看下面的例子 -
<?php
$vars = array("hw", "os", "lang");
$var_hw="Intel";
$var_lang="PHP";
$var_os="Linux";
foreach ($vars as $var)
echo ${"var_$var"} . "\n";
print "$var_hw\n$var_os\n$var_lang";
?>
它将产生以下输出 -
Linux
PHP
Intel
Linux
PHP
需要注意的是,这种技术不能在函数或类方法中与 PHP 的超全局数组(PHP 中的几个预定义变量是“超全局变量”,这意味着它们在整个脚本的所有范围内都可用)一起使用。变量 “$this” 是 PHP 中的一个特殊变量,不能动态引用。