Php 简明教程

PHP - $ and $$ Variables

我们知道 PHP 使用“$”符号作为变量名前缀的惯例。PHP 还可以通过在名称之前添加两个美元符号 ($$) 来声明动态变量。变量变量(或动态变量)可以动态设置和使用。

普通变量的声明如下 −

$a = 'good';

动态变量取正常变量的值并将其作为变量的名称。在上面的示例中,“good”可以使用两个美元符号“$$”作为变量名 −

$$a = 'morning';

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

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

两者都产生相同的输出 −

good morning

Example 1

看看下面的 example

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

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

它将生成以下 output

good morning
good morning

Example 2

我们来看另一个示例 −

<?php
   $x = "foo";
   $$x = "bar";
   echo "Value of x = " .$x . "\n";
   echo 'Value of $$x = ' . $$x . "\n";
   echo 'Value of foo = ' . $foo;
?>

在这里,你会得到以下 output

Value of x = foo
Value of $$x = bar
Value of foo = bar

Using Multiple "$" Symbols

请注意,美元符号“$”的使用并不限于两个。可以添加任意数量的美元符号作为前缀。

假设有一个变量“$x”其值为“a”。接下来,我们定义 x='as',那么“x”和“$a”将具有相同的值。同样,语句 $$$x='and' 实际上声明了一个“$as”变量,其值为’and'。

Example

这是一个完整的示例,展示了多个“$”符号的使用。

<?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;
?>

当您运行此代码时,它将生成以下 output

$a= Hello
$$a= World
$$$a= lang
$$$$a= php
$$$$$a= a

Using Dynamic Variables with Arrays

将动态变量与数组一起使用可能会导致某些歧义的情况。对于数组“a”,如果你写 a[1],那么解析器需要知道你是否正在引用“$a[1]”作为变量,或者你希望“a”作为变量,然后从该变量中获取 [1] 索引。

若要解决此歧义,请对第一种情况使用 ${$a[1]},对第二种情况使用 ${$a}[1]。

Example

请看以下示例:

<?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";
?>

它将生成以下 output

Intel
Linux
PHP
Intel
Linux
PHP

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