2011-06-17 65 views
1

嗯,我在我的方便的PHP書中讀到,能夠區分參考和可變參數是非常重要的。該書說,當變量改變時,參數化變量的原始值將被保留,而當參考被改變時,參數化參考的原始值會改變。它說這是關鍵的區別,如果我正確閱讀。函數通過引用或者通過變量來使用哪個函數?

嗯,我想知道什麼時候每個比另一個更有用。如何知道何時使用變量以及何時使用引用創建自己的函數?

+1

其實對象是各地通過參考默認爲傳遞5.3(儘管這不影響原語)。 –

+1

@Tomalak:更具體地說,通過對象標識符傳遞(和分配)對象,該對象標識符的行爲與引用的行爲稍有不同。例如,如果您通過爲其指定字符串值「abc」來覆蓋傳遞的對象,則會看到原始對象保持不變。 – webbiedave

+0

@webbiedave:當然,那。 –

回答

2

「參考文獻」(變量別名)使您的代碼難以理解,並且可能成爲難以追蹤錯誤的根源。在php中使用引用沒有任何正當的理由,並且爲了安全起見,儘量避免使用它們。

而且,php5中的對象與「引用」無關。

在php中實現的「參考」是一個奇怪的概念。通常,在編程語言中,變量彼此獨立,因此更改一個變量不會影響其他變量。 Php「引用」允許多個變量共享相同的值並相互依賴。基本上,你改變了一個變量,而另一個你認爲完全不相關的變量也正在發生變化。這不是件好事,經常會導致很多混亂。

php中的對象(我需要添加'五'嗎?)與上述意義中的「引用」無關。它們的行爲很像C指針(實際上,這就是它們的底層) - 當你將一個對象傳遞給一個函數時,你實際上傳遞了一個指針,函數可以使用這個指針來操縱對象內容,但是沒有方法爲函數更改傳遞的變量本身,例如,使其指向另一個對象。

這種「對象引用」的誤解可能是因爲人們混淆了generic CS term,這也適用於指針PHP的「引用」(符號語法),處理等

+0

我想你應該擴展你的陳述,「沒有任何有效的理由在php中使用引用。」 – webbiedave

+0

我同意....同時,我並不真正瞭解對象和引用如何關聯。我認爲引用被分配給函數,而不是對象....我真的很想聽到更多,但我想很難通過虛空來解釋....如果您可以擴展您的答案,我會非常感激。 –

+0

謝謝。由於C級解釋,它變得更有意義。這是它在我的書中繪製的方式 - 對象是指針。我仍然不完全明白,但是我非常有信心在這一點上它已經超出我的想象。然而,在我看來,使用引用的場合應該是一個變量變化應該影響多個函數的返回值,同一個引用應該被用作這些函數中的每一個的參數。...... –

3

這很簡單。當您需要修改傳入該函數的變量的值時使用引用。當你不需要或想要修改該值時使用變量。因此,例如,如果您正在編寫一個接受數組並且更改該數組的函數,那麼最好使用該數組的引用而不是從該函數返回新數組。

+0

處理對象時不要[明確]使用引用。當你想將收到的對象複製到一個函數中時,不要做任何事情。 –

+0

對不起,這是我的頭頂。我只是剛剛閱讀了有關引用和變量的內容,並沒有看到它們與對象的關係。也許我將不得不在稍後時間回來瞭解。這是我的想法,但是,如果它可以幫助你解釋:對象似乎沒有返回值。那麼,他們如何複製到功能? –

+0

@Fohsap他們通過引用傳遞。 –