2010-01-17 41 views
15

考慮:PHP中的=是什麼意思?

$smarty =& SESmarty::getInstance(); 

什麼是&呢?

+2

如果您將來需要在PHP幫助參考或搜索引擎中搜索「操作符」。 – 2010-01-17 18:06:43

+1

你也應該查找一些叫做「Singleton」的東西。 – cwallenpoole 2010-01-17 19:18:10

回答

24

它通過參考。這意味着它不會創建傳遞的值的副本。

參見: http://php.net/manual/en/language.references.php(見亞當的回答)

通常情況下,如果你通過這樣的事情:

$a = 5; 
$b = $a; 
$b = 3; 

echo $a; // 5 
echo $b; // 3 

如果你改變了第二個變量的原始變量($a)將不會被修改($b)。如果你通過參考:

$a = 5; 
$b =& $a; 
$b = 3; 

echo $a; // 3 
echo $b; // 3 

原來也改變了。

傳遞對象時無用,因爲默認情況下它們將通過引用傳遞。

+5

默認情況下,PHP5對象通過引用傳遞* not *,而對象標識符通過值傳遞(類似於Java的'引用'語義);詳情請參閱手冊:http://www.php.net/manual/en/language.oop5.references.php – Christoph 2010-01-17 17:18:36

+0

謝謝,現在對我來說似乎毫無意義 – JasonDavis 2010-01-17 17:21:44

+0

這真的很沒意思。人們使用它們的主要原因是不需要函數來返回變量,而只需修改變量。 – 2010-01-17 17:28:40

5

在PHP   4,這種(笨拙)相關的兩個變量。

$j = 'original'; 
$i =& $j; 
$i = 'modified'; 
echo $j; // The output is 'modified' 

同樣...

$j = 'original'; 
$i =& $j; 
$j = 'modified'; 
echo $i; // The output is 'modified' 

一些這方面作出時候還少一點不愉快在PHP 5的對象,但我認爲它的心臟是相同的,所以這些例子應仍然有效。

1

References用於別名變量,並有效地使用舊的對象系統。

在PHP   4中,對象的行爲與任何其他值類型相同,也就是說,分配會創建對象的副本。如果您想避免這種情況,您必須使用示例代碼中的引用。

隨着PHP 5,對象變量不再包含對象本身,但一個句柄(AKA對象標識符)和賦值只會複製句柄。使用參考不再是必要的。