PHP Dersleri – PDO Object Mapping

Merhaba arkadaşlar mobilhanem.com için hazırladığımız eğitim serimizde  bu ders PDO Object Mapping olayını göreceğiz.  Object mapping olayı sayesinde veri tabanından gelen bilgileri bir class gibi kullanıp hatta istersek bu classa ek fonksiyonlar tanımlayarak bütün işlerimizi bu class içerisinde halledebiliyoruz. Bu classı kendimize göre özelleştirmek tamamen bizim elimizde. Sadece sütün isimlerimizi class değişkeni olarak kullanmamız yeterli oluyor.

 

Object Mapping

Object mapping aslında PDO::FETCH_OBJECT statik sabitinin biraz daha gelişmiş halidir. object mapingi kullanabilmek için setFetchMode(PDO::FETCH_CLASS,”CLASS_NAME”) şeklinde kullanabiliyoruz. İşin daha da güzeli bu classı tanımlamamıza gerek yok ama tanımlamayacaksak eğer  FETCH_OBJECT kullanmaktan farkı kalmıyor. Şimdi daha fazla kafa karıştırmadan her zamanki gibi daha iyi anlamak adına  örneğimize geçelim.

 

Öncelikle veri tabanı yapımızı hatırlayalım. Kullanıcılar tablomuzun yapısı aşağıdaki şekildeydi.

 

 

 

 

Şimdi örneğimizi yapalım. Örneğimizde kullanıcının adı soyadı, kullanıcı adı ve posta bilgisini tablo halinde ekrana yazdıralım.

 

<?php
// Veri Tabanı Bağlantısı. 
try {
     $db = new PDO("mysql:host=localhost;dbname=mobilhanem", "root", "");
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch ( PDOException $e ){
     print $e->getMessage();
}


class Kullanicilar {
	
	public function kullaniciBilgisi() {
		
		return   " <table border='1'>
			<tr>
				<td> Kullanıcı Adı</td>
				<td> :</td>
				<td> ".$this->kullanici_adi."</td>
			</tr>
			<tr>
				<td> Ad Soyad</td>
				<td> :</td>
				<td> ".$this->ad_soyad."</td>
			</tr>
			<tr>
				<td> E-Posta</td>
				<td> :</td>
				<td> ".$this->posta."</td>
			</tr>
			
		</table>"; 
		
		
	}
	
	
}

$kullanicilar = $db->query("select * from kullanicilar"); // sorgumuzu yaptık
$kullanicilar->setFetchMode(PDO::FETCH_CLASS,"Kullanicilar"); // fetch modu belirttik

foreach($kullanicilar as $kullanici) {
	echo $kullanici->kullaniciBilgisi();
}

 

Bizim veri tabanımızda kullaniciBilgisi() fonksiyonu bulunmazken biz FETCH_CLASS sayesinde fonksiyonumuzu kullandık.  Tek sayfa için gereksiz olabilir ama büyük bir sistemde her seferinde aynı taslağı yazmak yerine sınıfta tanımlayıp tek bir fonksiyon ile kullanmak daha güzel olur.

setFetchMode() yerine daha kısa olan fetchAll() ile sorgumuzu tek satıra indirebiliriz.

 

<?php
// Veri Tabanı Bağlantısı. 
try {
     $db = new PDO("mysql:host=localhost;dbname=mobilhanem", "root", "");
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch ( PDOException $e ){
     print $e->getMessage();
}

 
class Kullanicilar {
	
	public function kullaniciBilgisi() {
		
		return   " <table border='1'>
			<tr>
				<td> Kullanıcı Adı</td>
				<td> :</td>
				<td> ".$this->kullanici_adi."</td>
			</tr>
			<tr>
				<td> Ad Soyad</td>
				<td> :</td>
				<td> ".$this->ad_soyad."</td>
			</tr>
			<tr>
				<td> E-Posta</td>
				<td> :</td>
				<td> ".$this->posta."</td>
			</tr>
			
		</table>"; 
		
		
	}
	
	
} 
$kullanicilar = $db->query("select * from kullanicilar")->fetchAll(PDO::FETCH_CLASS,"Kullanicilar"); // sorgumuzu yaptık 

foreach($kullanicilar as $kullanici) {
	echo $kullanici->kullaniciBilgisi();
}

Object mapping olayı oldukça kullanışlı ve geliştirmesi tamamen bizim hayal gücümüze bırakılmış bir yapıdır. Şimdilik basit bir örnek yaparak anlattık.

 

Bir dersimizin daha sonuna geldik. Bir sonraki dersimizde görüşmek üzere ?

Konuyla ilgili yorumlarınızı konu altından yapabilirsiniz, ayrıca sorularınızı yine konu altından ve Mobilhanem Soru&Cevap bölümünden sorabilirsiniz.

Tüm php dersleri için tıklayınız..

27

Vehbi Akdoğan

Erzurum Atatürk Üniversitesi Bilgisayar Mühendisliği Mezunu
Web & Android Developer
#erzurumspor

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?