2013-03-20 71 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"; 

爲了得到你的預期。