PHP - $ 和 $$ 变量



我们知道 PHP 使用在变量名前面加上 “$” 符号的约定。PHP 还可以通过在名称前加上两个美元符号 ($$) 来声明动态变量。可以动态设置和使用变量变量(或动态变量)。

普通变量的声明是这样的 -


 $a = 'good';

动态变量采用普通变量的值,并将其视为变量的名称。在上面的例子中,通过使用两个美元符号 “$$” - “good” 可以用作变量的名称 -


 $$a = 'morning';

我们现在有两个变量:“$a”和“$$a”,内容为“morning”。因此,以下 echo 语句将产生相同的输出 -


echo "$a {$$a}";
echo "$a $good";

两者都产生相同的输出 -

good morning

示例 1

看看下面的例子 -


<?php 	
	 	$a = 'good';
	 	$$a = 'morning';

	 	echo "$a {$$a}\n";
	 	echo "$a $good";
?>

它将产生以下输出 -

good morning
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 = 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= Hello
$$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";
?>

它将产生以下输出 -

Intel
Linux
PHP
Intel
Linux
PHP

需要注意的是,这种技术不能在函数或类方法中与 PHP 的超全局数组(PHP 中的几个预定义变量是“超全局变量”,这意味着它们在整个脚本的所有范围内都可用)一起使用。变量 “$this” 是 PHP 中的一个特殊变量,不能动态引用。