2016-09-06 105 views
0

以下guide,但我總是很難理解PHP中的引用。在下面的參數中使用引用的目的是什麼?註冊模式 - 與參考和沒有

public function register($name, &$object) 
{ 
    $this->registries[$name] =& $object; 
} 
public function &getRegistry($name) 
{ 
    return $this->registries[$name]; 
} 

沒有引用:

public function register($name, $object) 
{ 
    $this->registries[$name] = $object; 
} 

public function getRegistry($name) 
{ 
    return $this->registries[$name]; 
} 

它也工作正常,沒有引用,那麼是什麼讓他們的優勢是什麼?

+1

如果'$ object'實際上是對象,那麼我不確定這些例子是否有優勢。 –

+1

引用傳遞傳遞對象的引用,而不是對象的副本。如果通過引用傳遞,則可以修改方法中的對象,並將修改應用於作爲參數傳遞的對象。 – feareoc

+1

@Rasmus如果'$ object'是*一個對象*,修改會影響它,無論有沒有明確的引用。對象不會在賦值時被複制。 – deceze

回答

2

對象需要通過引用在PHP 4黑暗時期顯式傳遞。由於PHP 5.0對象本質上是的引用,因此無論您是否通過引用傳遞對象引用,它都沒有任何區別。關於此事的每位指導都會告訴您通過引用省略傳遞對象。

+0

感謝您的回答! – laukok

+1

它確實有所作爲。如果傳遞並存儲對象作爲引用,那麼更改最初傳遞的變量的值(例如將其設置爲不同的對象或甚至其他類型)也會影響'$ this-> registries'中的值。 – ShiraNai7

+0

是的,公平的,如果你使用引用,那麼你的代碼將按照引用規則行事,除非是非常特定的場合,這通常是你想要避免的東西。這不是其中之一。 – deceze