pillinetwork hesabınızla giriş yapın.

Php'de Nesne Yönelimli Programlama

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

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
<?php class renk
{
private $no;
private $deger;
private function __construct($no)
{
self::$nesneler[$no]=$this;
$this->no=$no;
}
public function __toString()
{
return $this->deger;
}
private static $nesneler;
public static function sec($no)
{
if(!(isset(self::$nesneler[$no])))
self::tumunuyarat();
if(!(isset(self::$nesneler[$no])))
throw new Exception('Obje yaratılamadı.');
else
return self::$nesneler[$no];
}
private static tumunuyarat()
{
$renksec = mysql_query("SELECT no, deger FROM renk WHERE 1 ");
while($renksatir=mysql_fetch_row($renksec))
{
$renk=new renk($renksatir[0]);
$renk->deger=$renksatir[1];
}
}
} ?>

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.

Spacer
Spacer
/* Carlyon yazdı. 18 Aralık 2008 19:08. 9 yorum var */

Yorumlar

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...

/* -[ ::: trespass bbs | connect 2400 | usr 14400 dual standart ::: ]- */

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 :)

üye olunpillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.

İlgili Yazılar

Bu yazıyı rapor et. Kural dışı içeriğe rastladığınızda editörlerimize rapor ederek müdahale edilmesini sağlayabilirsiniz. (Hangi durumlarda rapor edebilirim?)

Bu site

Nokta ve pilli ortak yapımı olan kodaman.org kolektif bir kod yazarları blogudur. Siz de katılabilirsiniz.

son yorumlar

arama

pillinetwork