Bu standardin herkesi belli bir sekilde sinir etmesi beklenen bir etkidir. Son halini bu sayfada gormus oldugunuz dokuman bir cok proje, bir cok sirket ve konu uzerinde tartisarak gecirilen cok sayida saat sonucunda bu halini almistir. Herhangi bir kisi veya kurumun sahsi tarzi degildir ve lokal olarak yapilabilecek degisikliklere aciktir.
Iyi Yonler:
Bir proje ortak bir standarda uydugunda bazi guzel seyler olur:
* Programcilar koda bakip neler olup bittigini kolaylikla anlayabilir. * Yeni baslayanlarin konuya hakimiyet kazanmasi hizlanir ve kolaylasir. * PHP'ye yeni baslayan insanlar kendi tarzlarini gelistirmek ve onu olumune savunmak zorunlulugundan kurtulur. * PHP'ye yeni baslayan kisilerin ayni hatalari defalarca tekrarlamasi engellenmis olur. * Tutarli ortamlarda hata yapma ihtimali azalir. * Programcilarin ortak bir dusmani olur.
Kotu Yonler:
Bir de kotu yonlere goz atalim:
* Standard genellikle aptalcadir cunku PHP 'den anlamayan birisi tarafindan yapilmistir. * Standard genellikle aptalcadir cunku benim yaptigimin aksini soylemektedir. * Standardlar yaraticiligi azaltir. * Insanlar tutarli olduklari surece standardlar gereksizdir. * Standardlard cok fazla yapilanmaya sebep olur. * Insanlar zaten standardlari kaale almazlar.
Tartisma:
Bir cok proje yoneticisinin tecrubeleri, standarlarin projelerin daha sorunsuz ilerlemesini sagladigi sonucuna ulasmaktadir. Peki basari icin standardlar gerekli midir? Tabii ki hayir. Fakat standardlarin olmasi bize projelerimizde yardimci olacaktir, ve bulabilecegimiz butun yardima ihtiyacimiz vardir. Durust olun, herhangi bir standarda karsi olan fikirlerinizin cogu sizin egonuzdan kaynaklanmaktadir. Standardlarda karsilastigimiz kararlarin pek azi teknik acidan yetersiz denebilecek seviyededir. Bu farkli kararlar olsa olsa sahsi bir tercihin sonucudur. Bu yuzden esnek olun ve butun projelerin temelinde takim oyunu oldugunu ve projelerin butun takimin cabasiyla basariya ulasacagini unutmayin.
Standardlarin Uygulamasi:
Oncelikle, bir standard konusundaki supheler ve sorunlar grup icerisinde tartisilip bir sonuca baglanmalidir. Kimbilir belki de elinizdeki standard icinde bulundugunuz duruma uygun olmayabilir. Bu standard bazi onemli unsurlari goz ardi ediyor olabilir. Hatta belki de yonetimde buyuk nufuzu olan kisiler standarddaki bazi unsurlara karsi olabilir.
Ilk tartisma asamasindan sonra varilan sonucun kabul edilebilir oldugunu, diger bircok programci tarafindan kabul edilebilir bulundugunu ve bu yuzden takip edip uygulamaya deger oldugunu ve gerekirse bu konuda sahsi tavizler verilebilecegini benimsemek gerekir.
Eger proje grubu bu standarda gonullu olarak katilmiyorsa yonetim bu standardi kodun kalite kontrolunden gecmesi icin uyulmasi gereken zorunlu sartlar olarak da niteleyebilir.
Bir Fikri Kabul Etmek:
1. Mumkun degil. 2. Mumkun olabilir, ama zayif ve hic ilginc degil. 3. Dogru ve ben dogru oldugunu zaten soylemistim. 4. Oyle oldugunu ilk ben dusundum. 5. Kim daha farkli oldugunu dusunebilir ki?
Yeni bir fikri kabul etme yolunda eger negatif bir onyargi ile ilerliyorsaniz, lutfen acik fikirli ve yeniliklere acik olmaya calisin. Boyle yaptiginiz halde bile hala sonucla ayni fikirde olmayacaginiz durumlar soz konusu olabilir, fakat yine de farkli bir yolu/yontemi kabul edebilmek icin takip etmeniz gereken bir yol vardir. O yolda ilerlemekten kendinizi mahrum etmeyin.
ISIMLER:
Konuya Uyan Isimler Secin
Isimler programciligin kalbidir. Eskiden bir insanin gercek adini bilmenin o kisi uzerinde sihirli guclere sahip olmayi sagladigina inanilirdi. Eger birsey icin dogru ismin ne olmasi gerektigini biliyorsaniz, kendinize ve sizden sonra gelecek programcilara kod uzerinde kullanibilecekleri buyuk bir guc veriyorsunuz demektir.
Bir isim, icinde bulundugu cevre hakkinda uzun ve derin bir dusunme surecinin urunudur. Sadece bir sistemin butun olarak calisma prensibini tam olarak anlayan bir programci sisteme tam anlamiyla uyan isimler bulabilir. Eger isim uygunsa geri kalan hersey dogal bir sekilde uyacaktir. Bu sayede iliskiler acik, anlamlar ulasilabilir, ve insancil beklentilerden yola cikarak ulasilan sonuclar anlamli olacaktir.
Eger kodunuza baktiginizda isimleri 'sey', 'birsey', 'bunu_yap','suraya_git', 'onu_calistir' gibi isimlerle degistirdiginizde birsey farketmeyecek gibi geliyorsa, o kodun dizaynina bir daha goz atsaniz iyi olur.
Sinif Isimleri
* Sinifin ismini, sinifin ne olduguna bakarak verin. Eger ismi bulmak konusunda cok ugrasiyorsaniz bu sisteminizin dizaynina yeteri kadar zaman harcamadiginizin bir belirtisidir. * Uc kelimeden fazla birlesik isimler sistem dizayninizin bazi seyleri bir birine karistiriyor olabileceginin bir habercisidir. Dizayninizi tekrar gozden gecirin. Bir CRC karti oturumuyla objelerinizin gereginden fazla sorumluluklarla yuklenmis olup olmadigini kontrol edin. * Bir siniftan kalitim/miras yoluyla (inheritance) baska bir sinif olusturdugunuzda ana sinifin ismini alt sinifin ismi icinde kullanmaktan kacinin. Eger bir sinifiniz varsa o sinif kendi ayaklari uzerinde durabilmelidir. Hangi baska siniftan olusturulmus oldugu onemli olmamalidir. * Eger siniflariniz bir ortak baslik altinda toplanabilir nitelikte ise, yani benzer bir amaca hizmet ediyorlarsa bu siniflari belli bir baslik altinda toplamak da mumkundur. Ornegin birkac 'motor' sinifiniz oldugunu dusunursek, SorguMotoru, AramaMotoru gibi sinif isimleri kullanilabilir.
Metod ve Fonksiyon Isimleri:
* Genellikle butun metod ve fonksiyonlar bir aktivite gerceklestirirler, bu yuzden isimleri de gerceklestirdikleri aktiviteyi belirtir nitelikte olmalidir. Ornegin, HataKontrol() yerine HataKontroluYap(), VeriDosyasi() yerine VeriDosyasinaCiktiYap() kullanilmalidir. Bu kullanim sekli degisken objelerinin ve fonksiyonlarin birbirine karismasini da engelleyecektir. * Bazen sona eklenen kisaltmalardan yararlanilabilir. - MAX : Bir degiskenin alabilecegi Maximum degerden bahsederken. - Cnt : Bir sayac degiskeninin o anki degeriniden bahsederken ( Sayac = Counter ) - Key : Bir anahtar deger ( Anahtar = Key )
Ornegin: TekrarMax - Maksimum tekrar sayisi, TekrarCnt - Su anki tekrar sayisi gibi kullanilabilir.
* Bazen basa eklenen kisaltmalardan da yararlanilabilir. (Bu bolumun aciklamasi yukari bolumle ayni. Ornek yanlizca ingilizce oldugunda basa eklenen bir ornek oluyor. Basa ek eklemek Turkce'ye uygun olmadigi icin burayi yok farzediyoruz)
Tamami Buyuk Harf Olan Kisaltmalar Kullanmayin:
* Normalde tamami buyuk harften olusan kisaltmalari bir isimde kullanmaniz gerektiginde bu kisaltmanin sadece ilk harfini buyuk yapip gerisini kucuk harfler devam edin. Ornegin: 'YeniHTMLSayfasi' yerine 'YeniHtmlSayfasi' kullanin.
Aciklama:
* Tamami buyuk harflerden olusan kisaltmalari isim olarak kullanirken herkes farkli bir tarz izlemektedir. Isimlerin ne anlama geldigini tahmin edebilmek acisindan sadece bir tarzi kullanmak gereklidir.
Ornegin NetworkABCKey isminde ABC'den gelen C ile Key'den gelen K karismis durumdadir. Bazi programcilari rahatsiz etmeyen bu durum digerlerini sinir edebilmektedir. Bu yuzden degisik kisiler tarafindan yazilmis kod orneklerinde bu konuya degisik yaklasimlar goreceksiniz.
Ornekler: class FluidOz // FluidOZ degil class GetHtmlStatistics // GetHTMLStatistics degil
Sinif Isimleri
Kelime ayraci olarak buyuk harf kullanip kelimelerin devamini kucuk harfler getiriniz.
Bir ismin ilk karakteri buyuk harf olmalidir.
Alt cizgi kullanmayiniz (' _ ')
Aciklama
Degisik isimlendirme sekilleri arasindan yukarida belirtilen sekil buyuk bir cogunluk tarafindan verilen tavizler ve kullanislilik dengesi acisindan en iyi olarak benimsenmistir.
Ornek
class IsimBirIki class Isim
Sinif Kitapligi (class library) Isimleri
* Isim boslugu/uzayi/alani (Name Space) kavraminin kullanimi iyice gelismekte oldugu icin farkli uretici ve gruplar tarafindan hazirlanmis kitapliklar arasinda sinif isimleri cakismasini onlemek icin bu Isim boslugu/uzayi/alani kavramindan yararlanmak gerekmektedir. * Isim boslugu/uzayi/alani kullanmilmadigi zaman genelde sinif isimleri ozel bir string ile baslatilarak cakismalar onlenir. Genelde basa gelen bu string icin iki karakter yeterli olsa da daha uzun bir string de kullanilabilir.
Ornek Serkan Hadi Ceylani'nin bir veri yapisi sinifinin ismi asagidaki gibi SHJ ile baslatilabilir:
class ShjLinkList { //kod buraya gelecek }
Metod Isimleri
* Yukaridaki sinif isimleri ile ayni kurallar gecerlidir.
Ornek
class IsimBirIki { function DoIt() {} ; function HataKontrolEt() {}; }
Sinif Degiskeni Isimleri (class attribute)
Sinifa ait (member) degisken isimleri 'm' karakteri ile baslamalidir.
'm' karakterinden sonraki kisim sinif isimleri ile ayni kurallara uymalidir.
'm' diger butun isim baslangiclarindan once gelir. Ornegin referans icin kullanilacak olan 'r' harfinden once gelmelidir.
Aciklama
* Isme 'm' ile baslamak metod isimleri ile meydana gelebilecek olasi bir cakismayi onler. Cogu zaman kullandiginiz metod ve degisken isimleriniz benzer olacaktir.
Ornek
class IsimBirIki { function VarAbc() {}; function ErrorNumber() {}; var $mVarAbc; var $mErrorNumber; var $mrName; }
Metod Arguman Isimleri (method argument)
Ilk karakter kucuk harf olmalidir.
Ilk harften sonraki her yeni kelime baslangici sinif isimlerinde oldugu gibi buyuk harfle baslamalidir.
Aciklama
<*? Bu sayede hangi degiskenlerin fonksiyon cagrisi icinden geldigi anlasilir.
Ornek
class IsimBirIki { function StartYourEngines(&$someEngine, &$anotherEngine) { $this->mSomeEngine = $someEngine; $this->mAnotherEngine = $anotherEngine; }
var $mSomeEngine; var $mAnotherEngine; }
Degisken Isimleri
* Sadece kucuk harflerden olusan isimler kullaniniz. * '_' karakterini kelime ayraci olarak kullaniniz.
Aciklama
* Bu yaklasimda degiskenin yasam/erisilebilme alani (scope) acik olarak gorulebilir. * Butun degisken cesitleri farkli olarak kullanildigi icin bunlari ayirdetmek kolaylasir.
Referans Degiskenleri ve Sonuc Olarak Referans Veren Fonksiyonlar
* Referanslar 'r' karakteri ile baslamalidir.
Aciklama
* Referans tipleri arasindaki farklar belirginlesir. * Sonuc olarak manipule edilebilir bir obje veren bir fonksiyon ile sonuc olarak modifiye edilemez bir obje veren ayni fonksiyonun ayirdedilmesi saglanir.
Ornek
class Test { var $mrStatus; function DoSomething(&$rStatus) {}; function &rStatus() {}; }
Global Degiskenler
* Global degiskenler 'g' karakteri ile baslamalidir.
Aciklama
* Bir degiskenin erisim/yasam alaninin bilinmesi onemlidir.
Ornek
global $gLog; global $grLog; // bu ornekte bir de referans icin 'r' karakteri var.
Tanimlanan Isimler ve Global Sabitler
* Globals sabit isimleri tamami buyuk harf ve '_' kelime ayraci kullanilarak yazilmalidir.
Aciklama
Global sabitlerin bu sekilde isimlendirilmeleri geleneksel bir yontemdir. Bunu kullanirken diger tanimlanmis global isimleri ve ENUM etiketleri ile karismamasina dikkat ediniz.
Ornek
define("A_GLOBAL_SABIT", "Merhaba Turkiye!");
Duragan (Static) Degiskenler
* Duragan (Static) degisken isimleri 's' karakteri ile baslamalidir.
Aciklama
* Degiskenlerin yasam/erisim alanlarini bilmek onemlidir.
Ornek
function test() { static $msStatus = 0; }
Fonksiyon Isimleri
* PHP fonksiyonlari icin C GNU tarzi tamami kucuk harf olup '_' karakterinin kelime ayraci olarak kullanildigi isimler kullanin.
Aciklama
* Bu kullanis sekli fonksiyon isimlerini diger butun sinif ile alakali isimlerden ayririr.
Ornek
function her_hangi_bir_fonksiyon() { }
Fonksiyonlardan Alinan Hatalari Kontrol Politikasi:
Hatalari kaale almamak istediginizden emin oldugunuz durumlar disinda butun sistem ve fonksiyon cagrilarini hatalar icin kontrol ediniz.
Butun sistem hatalari icin sistem hata mesaji metnini de aliniz.
Baglama Isareti {} Politikasi Sikca kullanilan 3 cesit baglama isareti kullanim tarzindan ilk ikisi gecerli olmasina ragmen mumkun oldukca ilk tarz kullanilmalidir.
Baglama isaretini ifadenin altina ve ifade ile ayni hizaya getir. (Allman stili de denir)
if($kosul) { ... }
while($kosul) { ... }
Geleneksel Unix tarzi olan acilis baglama isaretinin ifade ile ayni satirda kullanilmasi. (K&R stili de denir)
if($kosul){ ... }
while($kosul){ ... }
Aciklama Hangi baglama isareti tarzinin kullanilacagi ancak taviz verilerek cozulebilecek bir sorun. Her iki tarz da kabul edilebilir olsa da cogu kisi ilk kullanis seklini daha uygun bulmaktadir.
Ilk tarz baglama isaretinin nerede acilip nerede kapandigini kolayca gorebilmek icin cok kullanislidir. Ayrica vi gibi bazi editorlerde baglama isareti esleme fonksiyonunu kullanmak icin satirin sonuna kadar gidip esleme tusuna basma zorunlulugundan kurtarip sadece satir satir asagi giderek esleme fonksiyonunu kullanmayi kolaylastirmaktadir.
Ikinci tarzi kullananlar genelde bir ekrana daha fazla kod sigdirma avantajindan yararlanmak isteyenlerdir.
Satir Basi, TAB ve Bosluk Politikasi
Satir basini her seviyede 3,4 bosluk olarak kullanin.
TAB yerine bosluk kullanin. Bir cok editor TAB'i bosluk karakterlerinden olusan bir duruma getirebilmektedir.
Gerektigi kadar satir basi birakin..daha fazla degil. Ust uste tekrarlanan satir baslari konusunda bir ust sinir olmasa da eger 4,5 seviyeden fazla satir basi biraktiysaniz kodunuzu tekrar gozden gecirin.
Aciklama
Herkes TAB icin farkli degerler kullandigi icin TAB kullanilmis bir kodu baska bir ortamda okumak veya yaziciyla basmak cok zorlasmaktadir. Bu yuzden farkli ortamlarda degisiklik gostermeyecek olan bosluk karakteri kullanilmalidir.
Bosluk sayisi hakkinda herkesin kabul ettigi bir standard yoktur. Tutarli ve surekli ayni sayida bosluk kullanilmasi yeterlidir. Bununla birlikte genelde 3,4 bosluk uygun gorulmektedir.
Her ne kadar satir basi seviyesi sayisini sinirlamak isteseniz de pratikte bu icinden cikilamayacak bir sinirlamadir. Bu yuzden ne kadar ic ice yerlestirilmis kod bloklari yazacaklari konusunda programcilarin kendi dusuncelerine guvenmek gerekmektedir.
Ornek
function fonksiyon() { if (ilk kosul) { if (baska bir kosul) { while (daha da fazla kosullar) { } } } }
not: (Makale sistemindeki sinirlamadan dolayi yukaridaki kod istendigi gibi gosterilememektedir. Normalde her kod blogu kendisini kapsayan bloga gore 3,4 bosluk kadar iceriden baslamaktadir)
Parantezlerin () Anahtar Kelime ve Fonksiyonlarla Kullanim Politikasi
Parantezi Anahtar Kelimenin hemen yanina koymayip arada bir bosluk birakiniz.
Parantezi Fonksiyon Isimlerinin hemen yanina koyUNUZ.
Fonksiyonlarin RETURN ifadelerinde gereksiz yere parantez kullanmayiniz.
Aciklama Anahtar Kelimeler fonksiyon degildir. Bunlarin hemen yanina parantez koymak fonksiyonlarla karistirilmasina sebep olmaktadir. Ornek
Basitce soyutlama kavramini her zaman ve her sartta kullanilmaya uygun, mumkun olan butun kosullar ve hata senaryolari goz onunde bulundurularak yazilmis ve spesifik olmayip genel (jenerik) olarak kullanilabilen fonksiyonlar kullanimi olarak tanimlayabiliriz.
Bu makalenin konusuyla da ilgili bir ornek vererek soyutlama kavramini biraz daha aciklayalim. Bir cogumuz MySQL ile calisacak programlar yazarken her seferinde, mysql_connect, mysql_select_db, mysql_query fonksiyonlarini ard arda yazarak cagiracagimiza bunlari 'wrapper' (kapsayici,ortucu) denen fonksiyonlar icinde koyarak basit bir veritabani_sorgula() fonksiyonuna indirgeyebiliriz. Bu sayede hem kodumuz cok daha kisa bir hale gelecektir hem de daha onemlisi iki ay sonra PostgreSQL ile calismaya karar verdigimizde kodumuzu bu yeni veritabanina uyarlamak cok daha kolay olacaktir. Tek yapmamiz gereken veritabani_sorgula fonksiyonuna geri donup onu PostgreSQL ile calisacak sekilde uyarlamaktir.
Peki kodumuzu baska bir veritabanina uyarlamak bu kadar kolaysa PHP'nin en son surumuyle gelen DBX Soyutlama fonksiyonlarina neden bu kadar seviniyoruz. Bunun birkac sebebini asagida siraliyorum.
1) Yeni baslayan PHP programcilari soyutlama veya wrapper kullanimi konusunda bilgisiz olduklarindan her veritabaninin kendi fonksiyonlarini kullanmaya alismaktadir. Bu cok verimsiz bir kodlama seklidir.
2) Soyutlama ve Wrapper fonksiyonlardan faydalanan programcilarin hemen hemen hepsi bu fonksiyonlarin kendi versiyonlarini yazmaktadirlar. Bu yuzden ne belli bir standard olusmakta ne de her zaman ve her ortamda kullanilabilecek bir beceri kazanilmaktadir. Ayrica bu kitapliklar yanlizca bir programcinin urunu oldugu icin yeterli optimizasyon saglanamamaktadir. Ayrica programcinin hic tecrubesi olmadigi bir veritabaninda bu kitapliklar kullanilamaz.
3) Ilave moduller ve kitapliklar halinde bir cok veritabani soyutlama kitapligi olmasina ragmen bunlarin kullanimi standard bir boyuta ulasmamistir. 2. basamakta rastlanilan sorunlarin coguna daha az bir seviyede de olsa burda da rastlanmaktadir. Ayrica bu moduller buyuk cogunlukla PHP'de yazildiklari icin PHP'nin kendisinin yazildigi dil gibi daha asagi seviyede calisan dillerde yazilan fonksiyonlara nazaran daha verimsiz olmaya mahkumdurler.
4) Bu kitapliklar standard bir PHP kurulumunda olmayacagindan kodunuz bir makinede calisirken digerinde calismayacaktir. Ozellikle tumuyle kendinize ait olmayan ortamlarda bu buyuk bir sorun yaratacaktir.
Peki DBX bize ne kazandiracak?
DBX ile birlikte bir veritabanina baglanip, sorgulama ve sonuclari alma isi tam anlamiyla bir standard haline gelmistir. Hangi veritabanini kullandiginiza bagli olmaksizin ayni ODBC ve JDBC teknolojilerinde oldugu gibi ayni fonksiyonlari kullanarak desteklenen her turlu veritabani ile calisma imkaniniz olacaktir.
Eger kodunuzu baska bir veritabanina uyarlamaniz gerekirse tek yapmaniz gereken en bastaki hangi tur bir veritabanina baglanildigini belirleyen secenegi yeni veritabanina degistirmektir. Bunu yaptiktan sonra teoride kodunuz yeni veritabani ile hic bir kod degisikligine gereksinim kalmadan calisacaktir.
Bu asamada aklimizda tutmamiz gereken 4.0.6 ve DBX'in cok yeni teknolojiler oldugu ve henuz butun veritabanlarini desteklemedigi. Tabi ki acik kod felsefesi sayesinde az veya cok kullanilan veritabanlarinin hepsinin en kisa zamanda desteklenmeye baslayacagindan hic suphemiz yok. Ornegimize gecmeden once su anda desteklenen veritabanlarina goz atalim. Bu makale yazildigi sirada MySQL,PostgreSQL, Microsoft SQL Server, ve ODBC destekleniyor. Bu arada Oracle,Sybase,DB2 gibi diger bazi veritabanlari desteklenmemesine ragmen ODBC destegi sayesinde bunlarin da DBX ile kullanilmasi mumkun. Unutmadan, DBX'i kullanabilmek icin kurulum asamasinda ./configure 'e --enable-dbx i de eklemek gerekiyor.
Ornek 1.
Bu ornegimizde tek yaptigimiz mysql veritabanina bir baglanti kurup, baglantinin kuruldugunu onayladiktan sonra baglantiyi kapatip cikmak.
<?php $link = dbx_connect ("mysql", "localhost", "veritabani_adi", "kullanici_adi", "sifre") or die ("Veritabanina Baglanilamadi"); print ("Veritabanina baglanti saglandi"); dbx_close ($link); ?>
Ikinci ornegimizde ise veritabanimizdaki isciler_tablosu tablosundan iscilerin ad ve soyadlarini ekranda listeleyen kucuk bir program yazacagiz.
// Ikinci olarak veritabani sunucusuna bir sorgu yolluyoruz. $sonuc = dbx_query ($db, "SELECT ad, soyad FROM isciler_tablosu");
// dbx_query() fonksiyonu hata halinde '0' gonderiyor. // Basarili bir sorgu sonucunda ya '1' ya da varsa sorgu sonuclari gonderiliyor. if ($sonuc == 0) { echo 'Sorgu Calismadi<br />'; } else { // Sorgumuzun sonucu olarak kac sonuc satiri gonderildigini $sonuc // objesinin 'rows' (satirlar) degiskeninden ogreniyoruz. // Bu bir sonraki dongu icin gerekli. $sonuc_satirlari = $sonuc->rows;
// Veritabaninin gonderdigi satirlari bir bir geziyoruz. for ($satir = 0; $satir <= $sonuc_satirlari; $row++) {
// Sonuclari sonuc objesinin 'data' degiskenini kullanarak tablodaki alan // isimlerini denk gelen degiskenleri cagirarak aliyoruz. echo 'Isci Adi: '.{$sonuc->data[$satir]["ad"]}.'<br />'; echo 'Isci Soyadi: '.{$sonuc->data[$satir]["soyad"]}.'<br />'; } }
// En son olarak da veritabanina actigimiz baglantiyi kapatiyoruz. dbx_close($db); ?>
DBX konusunda dikkat etmeniz gereken bir ozellik sonuc satirlarini veritabanindan istemek icin bir fonksiyon bulunmayisi. Yani mysql_fetch_array, mysql_fetch_row tarzi fonksiyonlar kullanilmiyor. Butun sorgular calistirildiklari halde otomatikman sonuclari da bir array'e atiyorlar. Yani dbx_query hem sorgu hem de sonuclari alma islemini yerine getiriyor.
Diyelim ki bu ornegi PostgreSQL ile calistirmak istiyoruz.. Tek yapmamiz gereken ilk satirdaki dbx_connect() fonksiyonundaki ilk parametre olan 'mysql' i , 'pgsql' ile degistirmekten ibaret.
DBX'in kullaniminin cok hizli bir sekilde artacagindan emin olabilirsiniz. Lutfen bu konudaki sorularinizi forumlarimiza tasiyiniz. Tekrarliyorum, PHP 4.0.6'yi --enable-dbx ile configure etmediyseniz bu fonksiyonlari kullanamazsiniz.