• 12-01-2011, 17:13:58
    #1
    Basitçe veritabanı işlemleri için kullandığım şu şekilde bir değişken ($db) var;

    class User {
    	public $db;
    	
    	public function __construct() {
    		$db = new DataHandle('users');
    	}
    	
    	public function create($data) {
    		$this->db->ekle($data);
    		// data dizisi $_POST'tan temizlenip geliyor ve form eleman isimleri veritabanı kolonu adlarıyla aynı.
    	}
    }
    Burda da görüldüğü gibi $db değişkenini $this->db şeklinde kullanıyorum (kullanmak zorundayım).

    - Bunu direkt $db olarak kullanma imkanım yok mu? Yoksa neden yok? public, global vs. olması ile mi alakalıdır?

    - Değişkenin veya fonksiyonun public veya private olmasının farkı nedir? Sınıf dışından erişimin olmaması gibi kısıtlamalar olduğunu biliyorum ama bunu nerede kullanabilirim, ufak bir örnekle açıklarsanız sevinirim.

    - Bu sorum biraz karışık ve konunun biraz dışında. Bir mysql database sınıfı ve bir data handle sınıfı oluşturdum. data handle sınıfı ekle/düzenle/güncelle/sil gibi basit işlemleri hallediyor. Bu sınıfla yeni nesne oluştururken şu şekilde kullanıyorum; new DataHandle('tabloadi');. Bu nesne ile sadece "tabloadi" tablosundaki verilerle uğraşıyorum. Diğer tablolar için başka nesneler oluşturuyorum. Bu performans açısından sağlıklı mıdır? Yoksa tek nesne oluşturup sınıf içinde kullanacağım fonksiyonlara tablo adı belirterek mi devam etmeliyim?

    Biraz fazla oldu ama buralarda bunları bilen insanlar olduğuna inanıyorum

    Edit: Başlıkta yanlışlık olmuş, özür dilerim. "Sınıfta" şeklinde düzeltilebilir.
  • 13-01-2011, 15:09:02
    #2
    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.
  • 13-01-2011, 23:54:45
    #4
    Öncelikle ilginiz için teşekkürler.

    3. madde biraz yanlış anlaşıldı sanırım. Benim izlediğim yolda her tablo için ayrı sınıf oluşturmadım. Tek sınıf oluşturdum, her tablo için aynı sınıftan başka bir nesne yaratıyorum. Sınıfın içindeki örneğin ekle() fonksiyonu da tüm tablolara uyum sağlaması için şu şekilde veri alıyor;
    $data = array(
    'kolonadi' => 'kolonverisi',
    ...
    );

    Daha önce dediğiniz gibi her tablonun veri işlemesi için ayrı sınıf oluşturuyordum, şimdi de oluşturuyorum fakat ekleme, silme gibi işlemleri kısaca bu data handle sınıfıyla (ekle, sil vs. fonksiyonlarını barındıran sınıf) hallediyorum. Asıl database sınıfında mysql_query gibi fonksiyonları karşılayacak fonksiyonlar var.

    Bu yöntem kod yazarken bana daha rahat geldi fakat rahata alışıp performanstan ödün vermek de istemedim. Yine çok karışık anlattım sanırım fakat biraz karışık bir konu.
  • 14-01-2011, 00:34:08
    #5
    forumxtr adlı üyeden alıntı: mesajı görüntüle
    Basitçe veritabanı işlemleri için kullandığım şu şekilde bir değişken ($db) var;

    class User {
        public $db;
        
        public function __construct() {
            $db = new DataHandle('users');
        }
        
        public function create($data) {
            $this->db->ekle($data);
            // data dizisi $_POST'tan temizlenip geliyor ve form eleman isimleri veritabanı kolonu adlarıyla aynı.
        }
    }
    Burda da görüldüğü gibi $db değişkenini $this->db şeklinde kullanıyorum (kullanmak zorundayım).

    - Bunu direkt $db olarak kullanma imkanım yok mu? Yoksa neden yok? public, global vs. olması ile mi alakalıdır?

    - Değişkenin veya fonksiyonun public veya private olmasının farkı nedir? Sınıf dışından erişimin olmaması gibi kısıtlamalar olduğunu biliyorum ama bunu nerede kullanabilirim, ufak bir örnekle açıklarsanız sevinirim.

    - Bu sorum biraz karışık ve konunun biraz dışında. Bir mysql database sınıfı ve bir data handle sınıfı oluşturdum. data handle sınıfı ekle/düzenle/güncelle/sil gibi basit işlemleri hallediyor. Bu sınıfla yeni nesne oluştururken şu şekilde kullanıyorum; new DataHandle('tabloadi');. Bu nesne ile sadece "tabloadi" tablosundaki verilerle uğraşıyorum. Diğer tablolar için başka nesneler oluşturuyorum. Bu performans açısından sağlıklı mıdır? Yoksa tek nesne oluşturup sınıf içinde kullanacağım fonksiyonlara tablo adı belirterek mi devam etmeliyim?

    Biraz fazla oldu ama buralarda bunları bilen insanlar olduğuna inanıyorum

    Edit: Başlıkta yanlışlık olmuş, özür dilerim. "Sınıfta" şeklinde düzeltilebilir.
    kullanımınız yanlış. $db olarak da kullanabilirsiniz sınıf dışında değişkene atayın.
    public : sınıf dışında içinde her yerden erişebilirsin
    private : sadece sınıf içinde erişebilirsin
    protected : sınıflar arasında erişebilirsin

    ayrıca kafan bayağı bir karışmışa benziyor
  • 16-01-2011, 15:14:18
    #6
    forumxtr adlı üyeden alıntı: mesajı görüntüle
    Öncelikle ilginiz için teşekkürler.

    3. madde biraz yanlış anlaşıldı sanırım. Benim izlediğim yolda her tablo için ayrı sınıf oluşturmadım. Tek sınıf oluşturdum, her tablo için aynı sınıftan başka bir nesne yaratıyorum. Sınıfın içindeki örneğin ekle() fonksiyonu da tüm tablolara uyum sağlaması için şu şekilde veri alıyor;
    $data = array(
    'kolonadi' => 'kolonverisi',
    ...
    );

    Daha önce dediğiniz gibi her tablonun veri işlemesi için ayrı sınıf oluşturuyordum, şimdi de oluşturuyorum fakat ekleme, silme gibi işlemleri kısaca bu data handle sınıfıyla (ekle, sil vs. fonksiyonlarını barındıran sınıf) hallediyorum. Asıl database sınıfında mysql_query gibi fonksiyonları karşılayacak fonksiyonlar var.

    Bu yöntem kod yazarken bana daha rahat geldi fakat rahata alışıp performanstan ödün vermek de istemedim. Yine çok karışık anlattım sanırım fakat biraz karışık bir konu.
    Size önerim pek fazla performansa takılmayın sonraları paronayaklaşma başlar( Kendimden biliyorum.)Önemli olan kodu yazarken rahat olmanız kodu hızlı yazmanız yazdığınız kodun işinize yaraması gerisi önemli değil.Tabi performansta önemli özellikle db sorgularında.