Cevaplar
-
class veribagla{ public $db,$root,$pass,$host; function baglanti(){ // bağlantı işlemleri } function query(){ // sorgu işlemleri } }
şeklinde olmalıdır en basitinden. -
Daha önce hiç kullanmadım ancak teorik olarak bilgim var. O yüzden aklımdan bir kod yazıp gönderemeyeceğim burada. Ancak sanırım aradığınız şey 'Singleton Design Pattern' oluyor. Google'da arama yaparsanız birçok sonuç çıkar. Dediğiniz gibi, sadece 1 kere class oluşturularak işler hallediliyor
-
Bu sorunun tam doğru bir cevabı yok hakkında ama muhtelif design pattern'ler var bununla ilgili olarak.
En basitçe şöyle yapabilirsin:
class UserModel { private $_db; public function __construct() { $this->_db = DbWrapper::getInstance(); } public function getUser($id) { return $this->_db->fetchRow("select * from users where id=?", $id); } public function create($data) { $this->_db->insert('users', array( 'nick' => $data['nick'], 'email' => $data['email'] // ...... )); return $this->_db->lastInsertId(); } }
Data'ya erişen tüm fonksiyonları aynı class içerisinde toplamanı tavsiye etmem, ileride karışır. Genelde database'deki her table bir class gibi düşünebilirsin, ancak istisnalar var tabii. Entity olarak düşünerek dataya erişen fonksiyonları gruplamak lazım.
Data Access Object, ActiveRecord, Table Data Gateway, Row Data Gateway gibi terimleri araştırabilirsin...-
serdar_alkan
madpoet hocam,
şimdi siz kullanıcı girişinin de içinde bulunduğu bir class yazmışsınız ancak ben makale girişi, sorgulaması v.b. ile alakalı bir fonksiyon yazcam diyelim. O class ın içinde de veritabanı bağlantısı olan bir fonskiyon yazmam gerekecek mi? Gerekecekse her seferinde veritabanına bağlanma olayı olması bir garip olur.
Kod yazma olarak sorunum yok arkadaşlar. Kodlarla alakalı değil mantığı ile alakalı sorunum var.12 yıl önce yazılmış -
madpoet
İşte DbWrapper::getInstance(); her seferinde db bağlantısı kurmuyor. Singleton olarak geçen bir yöntem, ilk çağırıldığında bağlantıyı kurar, sonrakilerde kurmaz, olan class'ı kullanır.
Alternatif olarak global bir değişken kullanabilirsin ki hiç tavsiye edilen birşey değildir.
Zend_Registry gibi bir yapı kullanabilirsin, ya da her model class'ını çağırdığında $db gibi bir parametre gönderebilirsin:
new UserModel($db);
gibi. Bu da yine global olarak değişken kullanmayı gerektiriyor o yüzden iyi bir çözüm değil bence.
Ben projelerimde Zend_Registry'ye db'yi kaydedip model class'larında geri çağırıyorum. Bunu bir parent class'ta yapıyorum, bu class'ın ek özellikleri de olduğu için ben bunu uygun gördüm ama dediğim gibi bu sorunun tam bir cevabı yok...12 yıl önce yazılmış -
serdar_alkan
Teşekkür ederim saolasın arkadaşım.
Şimdi yabancı kaynaklardan da baktım da singleton design pattern ile bu şekilde çözülüyormuş. Database class ını ram de tutup tekrar tekrar oluşturmak zorunda kalmıyoruz. Anlaşıldı :))12 yıl önce yazılmış
-