php 特有的变量,PHP 特色:可变变量

“可变变量”这一概念是 PHP 的特色语法,在其它的编程语言中一般没这种骚操作……

通俗的说,可变变量就是“变量的变量”,一个变量的名,又是一个变量 [晕] 。描述起来很绕,下面直接看代码!

可变变量的使用

要定义一个可变变量很简单,只需在一般的变量前面再加上一个美元符号"$"

$hello= '你好';

$a= 'hello';

echo$$a;

?>

运行上面的代码,输出的是 “你好”。为什么会输出 “你好” 呢,我们来逐句解析。

第一句定义了一个普通的变量 $hello ,值为 “你好”;

第二句也定义了一个普通变脸 $a ,值为 “hello”;

第三句就用上了可变变量 $$a ,因为之前定义的 $a 的值为 “hello”,所以 $$a 就相当于 $hello ,所以最终输出了 “你好”……

让我们再来看下一个例子……

$a= 'hello';

$$a= 'world';

echo"$a ${$a}";

?>

以上代码中,$a 的内容是 “hello”,$$a 的内容是 “word”。同时,因为 $$a 是一个可变变量,所以它等效于 $hello。因此上述代码也可以写成

$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)。

// 可变属性示例

classfoo {

var$bar= 'I am bar.';

var$arr=array('I am A.', 'I am B.', 'I am C.');

var$r= 'I am r.';

}

$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 个呢? 统统没问题……

$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 开发的都不差钱,因为有很多的 $ ... ...

?>

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值