Kimlik doğrulama veya yönetimden onay bekliyor.
1)$db diye bir değişken oluşturmuşsan sınıf içerisindeki diğer fonksiyonlarda bu değişkene ancak $this->db şeklinde ulaşabilirsin.
Kısaca kullanım şekli bu şekilde,değişkenin public yada private tanımlanmasıyla alakası yok yani.
2) Örnek olarak oluşturduğun User Sınıfında eğer $db değişkenini private yapmazsan public yaparsan.
$user=new User();
$user->db='aaa';
şeklinde bir kullanımda $db değişkeninin değerini değiştirmiş olursun peki bu neden sorun olur dersen sınıfı sen yazmışsın sen üstüne yazılmaması gerektiğini bilirsin fakat aynı projede birden fazla kişi bu sınıfı kullanınca sorun olabilir.
Mesela PHP4'te sınıf içerisinde değişkenler tanımlanırken private kavramı olmadığı için değişkenler $_db şeklinde tanımlanırdı.( Alt çizgi bırakılırdı.)
3) Seçim sana kalmış Pek fazla performans farkı yaratacığını sanmıyorum.Fakat şu an kullandığın şekilde kullanıma devam edersen daha iyi olur düşüncesindeyim.Çünkü her birini ayrı bir nesne gibi tutman daha iyidir, Çünkü her tablo için bir sınıf oluşturuyorsun extra bir düzünleme gerektiğinde istediğin şekilde düzeltebilirsin.Misal User sınıfı ile üye eklerken üye şifresini md5 lemek istiyorsun o zaman yapman gereken User sınıfının create fonksiyonunu $data['password']=md5( $data['password']); şeklinde değiştirmen.