PHP之可变变量

前言:本篇博客主要讲解PHP的可变变量的作用和用法。文章中所涉及到的例子来自http://php.net/manual/zh/language.variables.variable.php,稍有改动。

正文:

  PHP中有一种变量叫做可变变量,这种变量不是一种基础类型的变量。可变变量是指一个普通变量的值可以作为另一个变量的名称被使用。这句话听起来有些抽象。我们可以通过实例来展示可变变量的定义以及实用。

1 $a = 'hello';
2 $$a = 'world';
3 echo $hello;

在上面这段代码中,第一行是一个普通的变量定义,变量名称为a,变量值为hello。第二行使用变量a的值,定义了一个变量,这个变量的名字叫做hello(也就是a的值),值为world。将这个变量输出之后的结果是:world。

 

  下面看一个稍微复杂一点的例子

1 $b = array("I","am","a","student");
2 $I = "a I";
3 $am = "word AM";
4 $a = "an A";
5 $student = "a STUDENT";
6 $var = 'b';
7 echo ${$b[1]};
8 echo ${$var}[1];

上面这段代码的1-6行都是在定义变量。第7行的结果为:word AM。下面我们解释第7行的结果。$b[1]的值是这个数组中的第二个元素,即 am,那么${$b[1]}也就是${am},即$am(花括号可以去掉)。那么,第7行的结果就是变量$am的值。第8行的结果为:am。下面我们解释第8行的结果。首先,服务器会解析$var的值,$var = ‘b',所以${$var}[1]为${b}[1],也就是$b[1]的值,即am。

以上两个例子都比较简单地说明了可变变量的用法。其实可变变量也可以用于PHP的面向对象中。下面的例子我们为大家解释可变变量在面向对象中的应用。

 1 class foo{
 2     var $bar = 'I am bar';
 3     var $arr = array('I am A','I am B','I am C');
 4     var $r = 'I am r';
 5 }
 6 
 7 $bar = 'bar';
 8 $baz = array('foo','bar','baz','quux');
 9 
10 $myfoo = new foo();
11 echo $myfoo->$bar."<br>";
12 echo $myfoo->$baz[1]."<br>";
13 
14 $start = 'b';
15 $end = 'ar';
16 echo $myfoo->{$start.$end}."<br>";
17 
18 $arr = 'arr';
19 echo $myfoo->$arr[1]."<br>";
20 echo $myfoo->{$arr}[1]."<br>";

上面这段代码中定义了一个类:foo。

  第11行的结果为:I am bar。因为在解析$myfoo->$bar的过程中,首先解释器会解析$bar,$bar的值为bar,那么$myfoo->$bar等同为$myfoo调用其类中的属性 $bar的值,结果为:I am bar。

  第12行的结果为:I am bar。因为在解析$myfoo->$baz[1]的过程中,首先解释器会解析$baz[1],$baz[1]的值为bar,那么$myfoo->$baz[1]等同为$myfoo调用其类中属性$bar的值,结果为:I am bar。

  第16行的结果为:I am bar。因为在解析$myfoo->{$start,$end}的过程中,首先解析$start和$end的值,分别为"b"和"ar",通过连接符"."连接后结果为bar,那么$myfoo->{$start,$end}的结果为$myfoo调用其类中属性$bar的值,结果为:I am bar。

  第19行的结果为:I am r。因为在解析$myfoo->$arr[1]的过程中,首先解析$arr[1]的值,即为r。$myfoo->$arr[1]的值为调用其类中属性r的值,结果为:I am r。

  第20行的结果为:I am B。因为在解析$myfoo->{$arr}[1]的过程中,首先解析$arr的值,为arr,然后是{$arr}[1]的值也是调用$myfoo属性$arr的第二个属性的值,结果为:I am B。

posted @ 2014-09-02 14:50  马七风  阅读(677)  评论(0编辑  收藏  举报