我有一個連接到MySQL幷包裝所有PDO代碼的PHP數據庫類,並使用它來查詢數據庫。基本上在頁面控制器我提出一個新的對象:
$db = new Database($dbConfig);
然後我就可以從數據庫中獲取數據,像這樣用準備好的查詢:
$params = array('username' => $username);
$result = $db->preparedSelect('select password, salt from users where username = :username', $params);
哪個副本PDO語句結果新ASSOC數組並僅將數據庫結果返回給調用頁面。我遍歷它們用一個簡單的foreach像這樣:
foreach ($result as $key => $val)
{
$password = $val['password'];
$salt = $val['salt'];
}
好了,所以可以說,我想另一個類用我的$ db對象,因此它可以在一些方法來訪問數據庫。目前,其他類看起來是這樣的:
class General
{
// Database object
private $db;
public function __construct($db)
{
$this->db = $db;
}
}
行之有效,但我只是想知道如果構造應該是這樣的:
public function __construct(&$db)
{
$this->db = $db;
}
這應該意味着我通過它在通過引用而不是將對象複製到其他類中。我不希望在類內部有一個$ db對象的副本,我希望它使用現有的數據庫對象,所以我沒有使用內存的多個副本。
將PHP5作爲$ db或& $ db傳遞之間有什麼區別?從做一些閱讀,默認情況下PHP5通過引用傳遞對象,其他人說它現在是Java方式,有人說使用&可以創建一個硬鏈接,不管它是什麼。我很困惑。什麼是最好的方式來做到這一點?
非常感謝!
所以,基本上如果我做_construct($ db),然後更改$ db對象內的值例如$ db-> testvar = 1我將在內存中有兩個$ db對象,原始的和testvar包含'1'的新對象。是對的嗎? 如果我做_construct(&$ db),然後分配$ db-> testvar = 1,我應該影響原始對象,並且只有一個$ db對象實例在內存中。是對的嗎? – zuallauz 2011-03-06 09:42:46
不,您將在兩種情況下都有一個具有更改值的對象,因爲在任何情況下都不會複製對象本身。在第一個函數中,如果你執行'$ db = null',調用者仍然有它原來的$ db,而在第二個函數中,調用者將不再擁有原始的$ db。 – Anomie 2011-03-06 16:04:30