2011-06-07 70 views
0

這不是關於何時使用「通過參考」與「通過價值傳遞」的理論或一般問題。這裏有幾個關於這種類型的問題,其中沒有人回答我非常具體的問題:PHP數據庫 - 作爲鏈接或「參考」傳遞給函數?

在PHP中,當將數據庫連接資源ID傳遞給函數(只是一個簡單的過程函數,而不是任何類或任何複雜的東西)如果我通過引用或按價值傳遞,那麼問題是否重要

連接本身沒有任何作用。它從未改變。所以參考和價值都很好。

我想我的問題是弄清楚爲什麼我會通過引用傳遞它。我有舊的繼承代碼,並且代碼中的註釋表明通過引用傳遞會節省內存並加速性能。我想知道這是否屬實?

btw我正在使用Postgresql連接,而不是MySQL。

謝謝!

+0

這對於數據庫來說很少(或者完全沒有)。考慮重新措辭更一般。 – 2011-06-07 18:35:07

回答

2

數據庫連接是一個「資源」。它通常只是一個指針,所以無論您是通過值還是通過引用來傳遞它都沒關係。在這個意義上,資源的行爲類似於對象。

通過引用傳遞過去曾經對內存使用量產生重大影響。這就是爲什麼舊代碼包含如此多的&運營商。但這不再是必要的。 PHP 5爲變量使用了寫時複製語義,因此在大多數情況下,它不會花費更多的內存來按值傳遞內容。特別是如果它只是一個像資源一樣的指針......但這也適用於其他類型的變量,如字符串和數組。 (嘗試按值傳遞1MB字符串,內存消耗不會增加1MB。)

+0

完美。非常感謝kijin和jci!非常清楚。 – PKHunter 2011-06-08 18:03:52

3

在這種情況下沒有區別,因爲資源變量本身是指向外部腳本資源的指針。 只需通過它的價值。

您可以檢查如果您使用echo $resourceVar;,PHP資源如何易於使用。
將打印類似:"Resource id #2"

2

對於大多數用途,它不會在所有問題(通常按值傳遞),除非你特別希望更改數據庫的連接。

它的工作方式與對象相似,即使按值傳遞對象時,仍然可以對其進行更改,因爲它是指向實際數據的指針。

所以要回答這個問題,你沒有理由通過引用傳遞。

相關問題