2011-03-11 43 views
3
<?php 
$a = 3; 
echo 'typeof $a is : ' . gettype($a) . "\n"; // integer 

$b = &$a; 
echo 'typeof $b es : ' . gettype($b) . "\n"; // integer 

$c = new stdClass; 
$c->name = "charles"; 

$b = $c; 
$b->name = "bill"; 

echo '$c->name : ' . $c->name . "\n"; 
echo 'typeof $b es : ' . gettype($b) . "\n"; 


echo 'typeof $a is : ' . gettype($a) . "\n"; // object 
echo 'The value of $a is : ' . $a->name; // bill 
?> 

輸出:

typeof $a is : integer 
typeof $b is : integer 
$c->name : bill 
typeof $b is : object 
typeof $a is : object 
The value of $a is : bill 
+1

你可以發佈你的代碼的輸出嗎? – GWW 2011-03-11 15:47:09

+2

您的代碼有語法錯誤。 – 2011-03-11 15:48:46

+0

輸出:http://ideone.com/R2Ii6 – fredley 2011-03-11 15:49:19

回答

3

這是因爲你設置$ B共享相同的內存地址爲$ a。所以當你改變$ b時,$ a也會改變。

如果結果不理想,請設置$b = $a而不是$b = &$a

+0

輸出爲:$ typeof運算a是:整數 的typeof $ b爲:整數 $ C->名:紙幣 的typeof $ b爲:對象 的typeof $ a是:對象 值$ a是:賬單 – beginnerPHP 2011-03-11 15:52:32

+1

不,你粘貼你的輸出到你的問題並正確格式化。 http://stackoverflow.com/editing-help – BoltClock 2011-03-11 15:53:06

+0

謝謝PMV。我現在明白了。 – beginnerPHP 2011-03-11 16:09:22

0

下面是引用PHP文檔,必須閱讀:http://php.net/manual/en/language.references.php

因爲a是一個參考 - 的b副本感謝託默勒格),因爲你用的&,所以每當b改變a會也改變。所以當你以後製作b=c(當前c是一個對象)b成爲一個對象,因此a(參考b)也成爲一個對象。

+1

-1:'a'是**不是**'b'的副本。 'b'是對'a'的引用:它們是同一個對象。 – 2011-03-11 15:50:45

+0

謝謝你,我更新了它。 – amosrivera 2011-03-11 15:52:16

+0

乾杯; downvote刪除。 – 2011-03-11 15:54:56

3
  • $breference$a
  • 您使$b等於$c,一個對象。
  • 這意味着現在$b是一個對象...
  • ...既然$b僅僅是$a參考,$a是一個對象了。
1

你告訴$b要到$a參考:

$b = &$a; 

那你告訴$b指由$c所指的對象:

$b = $c; 

由於$b$a被「鏈接」到相同的值,兩者都是同一個對象的引用,並且$a失去了它的整數值略。

您現在有兩個不同的參考對象:一個屬於$c,它是通過創建對象並分配它而獲得的。另一種是通過將$c,的參考值分配爲值$b而創建的,因此將其複製。然後通過鏈接$b$a共享(通過引用分配)。

+0

感謝BoltClock。我現在明白了。 – beginnerPHP 2011-03-11 16:01:47

0

因爲$b = &$a$a,所以$b$a同樣的事情,並且無論任何引用是可以互換的。圍繞創建這個參考

+0

謝謝Fredley。現在很清楚。 – beginnerPHP 2011-03-11 16:08:31

0

你的問題的中心:

$b = &$a; 

當你算賬的對象分配給$b它將被$a繼承。 The assignment does not overwrite the reference.相反,$ b是$ a的內容的名稱別名,所以您應用於$ b的所有更改實際上都會顯示在$ a中。 $ b僅保留參考,而不是屬性。

+0

是的馬里奧。有時候有點令人困惑。 – beginnerPHP 2011-03-11 16:03:30

相關問題