在PHP中,引用變量在1或其他變化時都會修改。VARIABLES和CLASSES中的引用行爲(通過引用形成) - 它們是不同的還是相同的?
新類由隱式引用形成,但修改擴展不會修改父類。
這是PHP的設計,還是它們是不同種類的「引用?」
在PHP中,引用變量在1或其他變化時都會修改。VARIABLES和CLASSES中的引用行爲(通過引用形成) - 它們是不同的還是相同的?
新類由隱式引用形成,但修改擴展不會修改父類。
這是PHP的設計,還是它們是不同種類的「引用?」
您在將子類化(擴展)與引用相混淆。
這是延長,這是你所描述的:
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;
在PHP中的引用是一個奇怪的構造。 $a =& $b;
使$a
參考$b
。這意味着只要$b
的值發生變化,$a
就會反映出這一變化。或換句話說,$a
將始終與$b
具有相同的值。
在PHP 4中,對象在分配時會被隱式克隆。例如。如果$b
是對象,則代碼$a = $b
將創建一個新對象,該對象是$b
的副本,並將其分配給$a
。這是一個問題,因爲你通常需要在對象上引用語義。爲了解決這個問題,你必須在處理對象時使用引用。由於PHP 5已經改變,所以今天很少有案例(如果有的話)你應該使用引用。
你能澄清你的問題嗎? – Gumbo 2009-10-04 22:04:22
是的 - 如果我創建一個新變量z,它是變量x的引用,那麼更改z的值會將x更改爲相同的值,對嗎?而事實恰恰相反 - 改變x的值會改變z的值,對嗎? 爲什麼通過引用形成的類不是這樣? 如果我通過擴展ParentClass創建一個名爲ChildClass的新類,然後更改ChildClass,則ParentClass保持不變!與基於參考變量的第一個示例進行比較時,這沒有任何意義。 – Grant 2009-10-04 23:44:02