2009-10-04 53 views
-2

在PHP中,引用變量在1或其他變化時都會修改。VARIABLES和CLASSES中的引用行爲(通過引用形成) - 它們是不同的還是相同的?

新類由隱式引用形成,但修改擴展不會修改父類。

這是PHP的設計,還是它們是不同種類的「引用?」

+0

你能澄清你的問題嗎? – Gumbo 2009-10-04 22:04:22

+0

是的 - 如果我創建一個新變量z,它是變量x的引用,那麼更改z的值會將x更改爲相同的值,對嗎?而事實恰恰相反 - 改變x的值會改變z的值,對嗎? 爲什麼通過引用形成的類不是這樣? 如果我通過擴展ParentClass創建一個名爲ChildClass的新類,然後更改ChildClass,則ParentClass保持不變!與基於參考變量的第一個示例進行比較時,這沒有任何意義。 – Grant 2009-10-04 23:44:02

回答

1

您在將子類化(擴展)與引用相混淆。

這是延長,這是你所描述的:

class ParentClass{ }; 
class ChildClass extends ParentClass { }; 

$parent = new ParentClass; 
$child = new ChildClass; 

$parent->setName('Dad'); 
$child->setName('Daughter'); 

echo $parent->name; 
// Dad 

是這樣的,其實你想要的東西被描述?

通過引用傳遞變量/類是一個完全不同的對話,並沒有真正連接到繼承/擴展類的想法。它更像這樣。

$parent = new ParentClass; 
$child = new ChildClass; 

$childRef = $child; // $childRef isn't a copy, it's a reference to $child. 
$childRef->setName('Daughter'); 

echo $child->name; 
// Daughter 
// Notice that it's the same as if you had called setName() on $child itself; 
0

在PHP中的引用是一個奇怪的構造。 $a =& $b;使$a參考$b。這意味着只要$b的值發生變化,$a就會反映出這一變化。或換句話說,$a將始終與$b具有相同的值。

在PHP 4中,對象在分配時會被隱式克隆。例如。如果$b是對象,則代碼$a = $b將創建一個新對象,該對象是$b的副本,並將其分配給$a。這是一個問題,因爲你通常需要在對象上引用語義。爲了解決這個問題,你必須在處理對象時使用引用。由於PHP 5已經改變,所以今天很少有案例(如果有的話)你應該使用引用。

相關問題