PHP中的可变变量
PHP可变变量是一种在PHP中用于动态访问数组元素的技术。它允许您使用一个变量作为数组的键,而不是直接使用字符串或数字作为键。这使得您可以在运行时更改数组的键,从而更容易地处理不同的数据结构。要使用可变变量,只需在变量名前加上一个美元符号($),然后在字符串中使用花括号({})将变量名括起来。例如,如果您有一个名为$key的变量,其中包含字符串"fruit",并且您想要访问数组$fruits中与该键关联的值,可以使用以下代码:`echo $fruits{$key};`。这将输出与键"fruit"关联的值。
“可变变量”这一概念是 PHP 的特色语法,在其它的编程语言中一般没这种骚操作……
通俗的说,可变变量就是“变量的变量”,一个变量的名,又是一个变量。描述起来很绕,下面直接看代码!
可变变量的使用
要定义一个可变变量很简单,只需在一般的变量前面再加上一个美元符号"$"
<?php$hello='你好';$a='hello';echo$$a;?>
运行上面的代码,输出的是 “你好”。为什么会输出 “你好” 呢,我们来逐句解析。
第一句定义了一个普通的变量 $hello ,值为 “你好”;
第二句也定义了一个普通变脸 $a ,值为 “hello”;
第三句就用上了可变变量 $$a ,因为之前定义的 $a 的值为 “hello”,所以 $$a 就相当于 $hello,所以最终输出了 “你好”……
让我们再来看下一个例子……
<?php$a='hello';$$a='world';echo"$a${$a}";?>
以上代码中,$a 的内容是 “hello”,$$a 的内容是 “word”。同时,因为 $$a 是一个可变变量,所以它等效于 $hello。因此上述代码也可以写成
<?php$a='hello';$$a='world';echo"$a$hello";?>
它们输出的内容都是 “hello world”
可变变量与数组
要将可变变量用于数组,必须解决一个模棱两可的问题。这就是当写下 $$a[1] 时,解析器需要知道是想要 $a[1] 作为一个变量呢,还是想要 $$a 作为一个变量并取出该变量中索引为 [1] 的值。
解决此问题的语法是,对第一种情况用 ${$a[1]},对第二种情况用 ${$a}[1]。
可变变量与类
类的属性也可以通过可变属性名来访问。可变属性名将在该调用所处的范围内被解析。例如,对于 $foo->$bar 表达式,则会在本地范围来解析 $bar 并且其值将被用于 $foo 的属性名。对于 $bar 是数组单元时也是一样。
也可使用花括号来给属性名清晰定界。最有用是在属性位于数组中,或者属性名包含有多个部分或者属性名包含有非法字符时(例如来自 JSON_decode() 或 SimpleXML)。
<?php//可变属性示例classfoo{var$bar='Iambar.';var$arr=array('IamA.','IamB.','IamC.');var$r='Iamr.';}$foo=newfoo();$bar='bar';$baz=array('foo','bar','baz','quux');echo$foo->$bar."n";echo$foo->$baz[1]."n";$start='b';$end='ar';echo$foo->{$start.$end}."n";$arr='arr';echo$foo->$arr[1]."n";echo$foo->{$arr}[1]."n";?>
玩坏了的可变变量
在一个普通的变量前边加一个 “$” 它就变成了可变变量,那么要是在可变变量的前面再加一个 “$” 呢?再加两个,加 N 个呢? 统统没问题……
<?php$Bar="a";$Foo="Bar";$World="Foo";$Hello="World";$a="Hello";$a;//=Hello$$a;//=>$Hello=World$$$a;//=>$$Hello=>$World=Foo$$$$a;//=>$$$Hello=>$$World=$Foo=Bar$$$$$a;//=>$$$$Hello=>$$$World=$$Foo=$Bar=a//以下相当于进入了循环...$$$$$$a;//=Hello$$$$$$$a;//=World//只要你愿意,你可以在前面加无数个美元符……$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$a;//Ps:据说搞PHP开发的都不差钱,因为有很多的$......?>