2014-03-07 74 views
0

我想如果下面這段代碼的工作,才:有人可以解釋這個PHP類型雜耍?

// Lets create and fill a new array 
$variable[] = 'value 1'; 
$variable[] = 'value 2'; 
$variable[] = 'value 3'; 

// Implode it, and save it to a a string 
$variable = 'values: ' . implode(', ', $variable); 

爲什麼它能夠存儲在$變量的字符串,當它仍然是一個數組?

認爲這是發生了什麼: 它創造新的價值(因此它的新的數據類型)在內存中,並然後其保存到$變量,並指出它必須被轉換成一個字符串。

我對不對?錯誤?有人可以解釋'幕後'會發生什麼嗎?

回答

1

PHP是一種鬆散類型的語言,因此它並不關心變量的類型。當您使用[]語法推新元素時,$variable會自動變爲數組。在前三條語句後,$variable將是一個包含三個值的一維數組,即value 1,value 2value 3

然後,在下一個語句中,您將分解的結果存儲在一個字符串中。我猜你因爲相同的變量名而感到困惑。在這裏,重要的是要注意implode(', ', $variable)是什麼評估第一。結果是一個字符串,然後與字符串values:連接,然後存儲回$variable(覆蓋之前存在的數組)。

這裏發生了什麼:

// $variable isn't defined at this point (yet) 
$variable[] = 'value 1'; 
$variable[] = 'value 2'; 
$variable[] = 'value 3'; 

/* 
print_r($variable); 
Array 
(
    [0] => value 1 
    [1] => value 2 
    [2] => value 3 
) 
*/ 

$imploded = implode(', ', $variable); 
/* 
var_dump($imploded); 
string(25) "value 1, value 2, value 3" 
*/  

$variable = 'values: ' . $imploded; 
/* 
var_dump($variable); 
string(33) "values: value 1, value 2, value 3" 
*/ 
+0

你證實了我的想法。我並沒有真正「困惑」,我只是有點好奇這是什麼讓這種類型的雜耍成爲可能。謝謝btw :) –

+0

PHP變量本身並沒有任何類型的信息附加到他們像其他語言,而不是他們指向的對象做 –