{ PHP Kodlama Standardlari (Dördüncü Bölüm)
|
||
| Soyutlama (Abstraction) ozellikle Object Oriented (obje temelli) programlamada vazgecilmez bir programlama prensibidir. 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. Ornek 2. <? // Ilk basamak veritabanina baglantiyi saglamak $db = dbx_connect ("mysql", "localhost", "veritabani_adi", "kullanici_adi", "sifre"); // 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. |
||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161
Hepimiz Tanışalım | Kurallar | Forum Kullanımı | Duyurular | İstek - Öneri ve Şikayetleriniz | Güncel Haberler | Köşe Yazıları & Makaleler | Dünya Gündemi & Dış Politika | Ekonomi Haberleri | Yaşam Haberleri | Sağlık Haberleri | Eğitim Haberleri | Spor | FENERBAHÇE | BEŞİKTAŞ | GALATASARAY | Galatasaray Özel | Anadolu Takımları | MotorSporları | Msn Teknik Destek / Bilgiler | Msn Live Messenger | Çeşitli Msn Programları | Msn Eklentiler & Programlar | Dinamik Görüntü Resimleri ve Avatarlar | Msn Skinleri | Arka Planlar | Msn Göz Kırpmaları | Msn İfadeleri | Msn Spaces | Msn Nick Yapımı | Teknik Destek | Network ve İnternet | Donanım | Programlar | Resimli Program Anlatımı | PHP / ASP WeB SiSTeMLeRi | vBulletin | JooMLa | SMF | Diğer Web Sistemleri | Programlama Dilleri | C / C++ / C# | Visual Basic | Asp & Php | PAscal-Delphi | Web tasarım | Web Yardım | Karikatürler | Forum Oyunları | Komik Yazılar | Komik Resimler | Off Topic | Zeka oyunları-Bilmeceler | İlginç Ve Garip Olaylar | Korku, Dehşet ve Gerilim | Online oyunlar | Knight Online | Ogame | Bitefight | Ultima Online | FRP | Özel Günler Ve Kutlamalar | TRForumcu Anketler | Tartışma Bölümümüz | Fan Club & Birliktelikler | TRForumcu Cafe | Romantizm - Aşka Dair... | Hobiler | Evcil Hayvan Bakımı | Fotoğrafçılık ve Kolleksiyonlar | Sözlük | Resim Galerisi | Fotoğraf & Resim | İlginç Resimler | Hayata Dair Karaler | Manzara ve Doğa | Çeşitli Resimler | Hayvan Resimleri | Avatar Deposu | İmza Deposu | Glitter & Giff Deposu | Resimli Yazılar | Gothic Dream | Duvar Kağıtları | Görsel Eğitim-Kişisel Gelişim Setleri | Açıköğretim Fakültesi | Ders Notları | Deneme Sınavları - Geçmiş Yıl soruları | Ders Notları | Öss | Oks | Kpss | Diğer | İngilizce - English Department | Dil Bilgisi - Grammer | İlkÖğretim ve Liseler | Üniversiteler | Ödev Test ve Problemleriniz | Bilgisayar | Fizik | Iktisat | Matematik | Tarih | Türkçe-Edebiyat | Atatürk Genel | Şanlı Türk Bayrağımız | Kemalizm | Atatürk'ün Sözleri | Atatürk'ün Resimleri | Hayatı | Genel Kültür | Tarihimzden Kesitler | Gezelim - Görelim | Dünya | Kariyer ve Kişisel Gelişim | TRF Test Bank | Bilim & Teknoloji ve Teknik | Makale Ve Denemeler | Efsaneler ve Hikayeler | Sağlık | Felsefe | Psikoloji | Parapsikoloji Ve Bilinmeyen | Kadınlar Kahvesi | Moda Ve Giyim Tarzı | Bakım ve Makyaj | Güzellik & Diyet | Saç Bakımı | Anne, Çocuk ve Bebek | Çocuk Eğitimi | Astroloji & Burçlar | Burçlar | Yemekler & Pratik Bilgiler | Tatlılar | İçecekler | Dünya Yemekleri | Hamur İşleri | Underground TürkçeRap Paylaşım | Amatör Müzik paylaşım | Müzisyen Bilgi Paylaşım | Gitar Akorları | Amatör müzik | Enstrüman Dersleri | Enstrümanlar Bölümü | Şarkı Sözleri | Türkçe Şarkı Sözleri | Yabancı Şarkı Sözleri | Youtube Müzik Videoları | YouTube Karışık Videolar | Nokia | Tema-Wallpaper Uygulamaları | Oyunlar | Sony Ericsson | Tema-Wallpaper Uygulamaları | Diğer Cep Telefonları | Samsung | Tema-Wallpaper Uygulamaları | Siemens | Motorola | Ring Tone Ve Ses Kalıpları | Amr-Polyphonic Bölümü