MySQL'e bağlanan ve tüm PDO kodunu tamamlayan bir PHP veritabanı sınıfım var ve veritabanını sorgulamak için kullanıyorum.
$db = new Database($dbConfig);
Sonra ben hazırlanmış bir sorgu kullanarak gibi veritabanından veri alabilir: Temelde sayfa denetleyicisi ben yeni bir nesne yapmak
$params = array('username' => $username);
$result = $db->preparedSelect('select password, salt from users where username = :username', $params);
hangisi yeni doç içine kopyalar PDO deyimi sonuçları dizi ve arama sonuçları sadece veritabanı sonuçlarını döndürür. Öyle gibi basit bir foreach ile onların aracılığıyla yineleme:
foreach ($result as $key => $val)
{
$password = $val['password'];
$salt = $val['salt'];
}
Tamam bu yüzden yöntemlerin bazılarında veritabanına erişebilmek başka sınıf benim $ db nesneyi kullanmak istiyorum diyelim. Şu anda diğer sınıf şuna benzer:
yapıcı gibi görünmelidir ama eğer merak ediyorum iyi çalışıyorclass General
{
// Database object
private $db;
public function __construct($db)
{
$this->db = $db;
}
}
:
public function __construct(&$db)
{
$this->db = $db;
}
ben bunu geçiyorum anlamına gelmelidir Yani referans yoluyla ve nesneyi diğer sınıfa kopyalamayın. Sınıf içindeki $ db nesnesinin bir kopyasını istemiyorum, varolan veritabanı nesnesini kullanmasını istiyorum, böylece belleğin kullanımıyla ilgili çok sayıda kopyası yok.
$ db veya & $ db olarak iletilmesi arasında PHP5'te bir fark var mı? Bazı okuma yapmaktan, PHP5 varsayılan olarak nesneler referans ile geçer ve şimdi söyleyen diğer insanlar bu Java yolu yapar ve bazıları & kullanarak her ne olursa olsun bir sabit bağlantı yapar. Kafam karıştı. Bunu yapmanın en iyi yolu nedir?
Çok teşekkürler!
Yani, eğer _construct ($ db) yaparsam ve $ db nesnesinin içindeki bir değeri değiştirirseniz, ör. $ db-> testvar = 1 Hafızada iki $ db nesneye sahip olacağım, orijinal ve testvarın bir '1' içerdiği yeni olan. Bu doğru mu? Eğer _construct (& $ db) yaparsam, $ db-> testvar = 1 atayım, orijinal nesneyi etkilemeli ve bellekte yalnızca bir $ db nesne örneği var. Bu doğru mu? – zuallauz
Hayır, her iki durumda da değiştirilen değerle tek bir nesneye sahip olacaksınız; İlk işlevde, eğer $ db = null 'yaparsanız, arayan kişi hala orijinal $ db değerine sahip olurken, ikinci fonksiyonda arayan artık orijinal $ db'ye sahip olmayacaktır. – Anomie