2013-03-20 111 views
3

我知道PHP变量变量是如何工作的,但无法理解 为什么这个脚本输出“我是r”。而不是“我是B”。PHP变量变量如何工作?

<?php 
class fooo { 
    var $bar = 'I am bar.'; 
    var $arr = array('I am A.', 'I am B.', 'I am C.'); 
    var $r = 'I am r.'; 
} 
$fooo = new fooo(); 
$arr = 'arr'; 
echo $fooo->$arr[1] . "\n"; 
//above line output 
//I am r. 
?> 
+0

类中的$ arr属于类(属性)。当你在'fooo()'中设置'$ arr'时,你可以这样做:'$ fooo-> arr ='arr';'。现在设置的'$ arr'属于正常范围,而不属于'fooo'类的实例化对象内。尝试谷歌一点如何范围在编程工作。它会变得更清晰:) – 2013-03-20 23:48:43

+0

$ arr里面的foo类被封装并指向不同的内存地址从$ arr变量点 – zkanoca 2013-03-20 23:49:59

+1

@SamDufel那帮他怎么样?我们并不都具有相同的技能水平或相同的学习速度。我们应该让拥有丰富经验的人尽可能多地接受新编码的人,并根据他们的技能调整我们的回应。 – 2013-03-20 23:51:03

回答

5

您正在定义$arr = 'arr';,然后让从字符串“改编”,而不是类Foo里面的阵列,这是第二个字符为什么你得到“R”([1]返回从你的话第二个字符) 。

解决方案?则应更换:

echo $fooo->$arr[1] . "\n"; 

有:

echo $fooo->arr[1] . "\n"; 

您会收到所需输出:

'I am B.' 
0

当你引用一个对象的属性,它的变量的名称,而不是变量本身。所以你想要做的:

echo $fooo->arr[1] . "\n"; 

为了得到你的预期。