Php kodunuzu tasarlarken veritabanı ve tasarım arasında nesnelerinizde bir katman yaratmak isteyebilirsiniz. Daha esnek daha düzenli bir tasarım için nesne yönelimli programlamanın ne kadar önemli olduğunu hepimiz biliyoruz. Bu yazıda Php'de Veritabanı Sorguları İçin Nesneleri Kullanmaya giriş yapacağım.
Veritabanı sınıflarını tasarlarken veritabanı yapınıza paralel gitmek uygun olacaktır. Sık sık kullanılan tabloların hepsini kaydedip gerektiğinde kullanmak uygun bir çözüm olabilir. Örneğin renklerin tutulduğu bir tablo için
|
|
sınıfını kullanmak faydalı olucaktır. Yukarıdaki kodu incelersek. Rengin numarası ve değerinin olduğu renk tablosundaki bütün satırların karşılığı olarak nesneler yaratmak için tumunuyarat() metodu kullanılmış. Bu metod renk nesnelerinde herhangi birisi seçildiğinde kendiliğinden çalışacak şekilde düzenlenmiş. __construct($no) metodunun private olması renk seçmek için sec($no) metodunun kullanılmasını zorunlu hale getiriyor. Bu durum aynı nesneden birden fazla yaratılmasını engelliyor.
önceki yazı php ile, hızlı ve basit bir cache uygulaması... |
ayni nesnenin birden fazla yaratilmasini engelleyen static olmasi degil mi?
mini bir not; yukarıdaki kod php5+ üzerinde çalışır. php4'de ki class sistemi çok farklıdır. construct ve destruct değişiktir php4'de...
php4'de construct etmek;
class foo
{
function foo(){}
}
şeklinde olur.. destruct için de shut_down fonksiyonu kullanmak gerekir ki bu pek iyi değildir. php'nin execution'ı bitince tetiklenir...
php4'de bir instance çıkarırken;
$a = new foo();
dediğinizde foo'dan kopye alır ve hafızada yer işgal eder. bunun için;
$a =& new foo();
demek gerekir... php5+ de bu default olarak referans olarak çalışır. yani &= 'e gerek olmaz...
php5 class :
class foo
{
function __construct(){}
function __destruct(){}
function __get( $name ){}
function __set( $name , $value ){}
function __call( $method , $arguments ){}
function __isset( $name ){}
function __unset( $name ){}
function __toString(){}
}
gibi süper handling method'ları vardır...
ne yazıkki yaptığım tüm TAB işaretleri filtrelenmiş... yorum b*k gibi oldu...
Kod çalışmıyor, __construct'in içindeki $nesne değil $nesneler array'i olmalı heralde. Ama gene çalışmıyor, çünkü bir kaç hata daha var.
Ve aşağıdaki satırı hiç anlamadım. :(
Bildiğim kadarıyla PHP'de böyle bir syntax yok.
$renksec("SELECT no, deger FROM renk WHERE 1 ");
Not: renksec("SELECT no, deger FROM renk WHERE 1 "); bir fonksiyonsa ve return deÄŸerin red ise $red die bir variable oluÅŸturur.
4-5 ay olmuş ama yine de sorayım extend edilmiş child class ın constructorunu parent classın constructoru içierisinde nasıl ateşleyebilirim?
Yapamazsın. Aile sınıftan, çocuk sınıfla ilgili hiç bir şeyi çağırmazsın.
PHP 5.3'te eklenecek 'static::' yöntemi ile aile sınıftan, çocuk sınıftaki aynı isimli sabit foksyonu çağırabileceğiz. O belki işine yarar.
php .net yolunda diyeceğim şimdi kızacaklar bana :) ama şu sınıflar c# , asp.net gibi olmuş aynı. hep ms suçlanacak değil ya esinlenmeden.
@vectro sadece beşeri kültür öğeleri toplumlar arasında yayılmıyor. görüyoruz ki programlama dilleri de bir nevi kültür öğeleri. birbirinden birikim alışverişi yapabiliyorlar :)) bu durum da dillerin yaşayan organizmalar gibi sosyoloji biliminin bir inceleme dalı olduğunu gösterir bize..
@Carlyon teşekkür ederim. Şimdilik çözümü child classı da obejct olarak atayarak hallettim. 5.3 çıktığında hosting firmaları hemen kurar mı bilmiyorum.
@lazaronnie hocam , Wittgenstein' ın ilk dönem felsefesi programlama dillerini anlatıyor gibi değil mi :)
pillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.
Nokta ve pilli ortak yapımı olan kodaman.org kolektif bir kod yazarları blogudur. Siz de katılabilirsiniz.