2016-12-05 40 views
0

我問這可能是該變種分配定義的後果:由IDE(phpStorm)允許多瓦爾分配在一個句子中的PHP

$component = $id = $class = ''; 

我的意思是,代碼不返回任何警告,致命或其他任何東西,但......有任何但是?

您認爲如何?

+5

它的罰款。這是標準的語法。 –

+0

我個人並沒有在PHP中看到任何錯誤。請注意,這種類型的分配在其他語言中可能會有所不同。在JavaScript中,我相信,這將創建指向同一對象的三個變量。 – aynber

回答

2

這沒關係。

PHP在寫入系統上使用副本。這意味着使用諸如字符串或整數等原始類型真的會在內存中創建,並且在您的示例中可能會沒問題。

PHP

$component = $id = $class = 'foobar'; 

var_dump($component); 
var_dump($id); 
var_dump($class); 

輸出

string 'foobar' (length=6) 
string 'foobar' (length=6) 
string 'foobar' (length=6) 

但要小心,當你做到這一點與對象,對象是通過引用傳遞,並有不同的行爲:

PHP

class Obj 
{ 
    public $_name; 
} 

$a = $b = new Obj(); 
$component = $id = $class = 'foobar'; 

$b->_name = 'Reynier'; //try to change name of second object only 
$id = 'Reynier'; // try to change $id only 

var_dump($a); 
var_dump($b); 

var_dump($component); 
var_dump($id); 
var_dump($class); 

輸出

#Both object are changed 
object(Obj)[1] 
    public '_name' => string 'Reynier' (length=7) 
object(Obj)[1] 
    public '_name' => string 'Reynier' (length=7) 

#only $id was changed 
string 'foobar' (length=6) 
string 'Reynier' (length=6) 
string 'foobar' (length=6)