19 Ocak 2008 Cumartesi

Nesne Yönelimli Programlama ve Php-3




İki sınıfın beraber kullanılması ve kalıtım;

Php’de en fazla iki sınıf beraber çalışabilir, bu cümle biraz yanlış oldu ama biraz daha açıklamaya çalışırsak her sınıfın sadece bir ebeveyn (parent)’i vardır, yani her sınıf bir tane sınıf kapsayabilir. Bunları bir de şekil üzerinde göstermeye çalışalım.

Php (1) ve (2) yi destekler fakat (3)’ ü desteklemez. Anlaşılmıştır umarım şimdi bir örnek yapalım bu iş için “extends” anahtar kelimesini kullanacağız.


class A
{
var $deger1;
function arababoya1()
{

}
}

?>


class B extends A
{
var $deger2;
function arababoya2()
{
}
}

?>

Görüldüğü üzere “extends” anahtar kelimesini kullanarak iki sınıfı beraberce kullanabiliriz, bu şekilde yine yazdığımız temel bir sınıfı bu şekilde daha özelleştirilmiş işlerde kullanmak için başka bir sınıfın içinde kullanabiliriz. Yukarıdaki kodu nasıl kullanacağımıza bakalım.




$b = new b();
$b -> arababoya1();
$b -> deger1=10;
$b -> arababoya2()
$b-> deger2=20;


Bir b nesnesi tanımladık B sınıfına ait ve içinde A sınıfına ait metotlarıda kullandık bu şekilde programları iç içe sınıflar yardımıyla yapabiliriz. Bu yazdığımız kodları başka projelerde rahatça kullanmamıza fayda sağlar.

Private, Public ve Protected

Daha önceden php4 ve php5’in farklarını açıklarken daha sonra belirticeğiz demiştik sıra geldi bunlara.
Php5’te nitelik ve metotlara ulaşmak için üç değişik ulaşım geliştirilmiştir.
Bunlar;

public: Türkçesi halk, genel manasındadır, anlayacağınız üzere bu şekilde tanımlanan metotlar ve nitelikler her yerden ulaşılabilir.Sınıfın içinden veya dışından.
Aynı zamanda varsayılan olarak kullanılır, hiç bir şey yazılmadıysa public’tir

private: Türkçesi özel demektir, gerçekten özel bir erişimdir, bu şekilde tanımlanmış metot ve nitelikler sadece ve sadece sınıf içinden erişilebilir. Bunun için özellikle metotlarda kullanırken dikkatli olmak lazım.

protected: Türkçesi korunmalı demektir, bu public ve private’nin arasında bir yerdedir. Bu şekilde tanımlanmış metot ve nitelikler sınıfın içerisinden ve diğer alt sınıflar tarafından ulaşılabilir yani kalıtımla ulaşabiliriz.

Bu kelimeleri istediğiniz sınıflara, metotlara veya niteliklerin başına yazarak istediğiniz sınıflara erişilip erişilemeyeceğini veya nasıl erişilebileceğini belirtebiliriz.Hiç bir şey yazmazsak varsayılan olarak public ayarlıdır.


Yetki Kullanma (Overridding)

Elinizde iki tane sınıfınız var ve bunları iç içe bir şekilde kullanmak istiyorsunuz, fakat bu iki sınıfın içinde aynı adlara sahip fakat farklı işler yapan metotlar ve nitelikler var, bu durumda sizce php hangisini kullanır, neler olabilir, ortalık biraz karışabilir bunu önlemek için;

1)İlk ve uzun yol biraz uğraştırıcı, zor, zaman çalan ve kullanışsız bir yol çakışan metot ve niteliklerin adlarını değiştirerek bir çözüme gidebiliriz :).

2)İki sınıfımız var ve bunlar iç içe(yani biri diğerini içeriyorsa) ve bazı metot ve nitelikler aynı adlara sahipse hangi sınıf diğer sınıfı kapsıyorsa onun içindeki metot ve nitelikler ilk önce kullanılır.Fakat biz kapsayan değil de kapsanan sınıftaki metot ve nitelikleri kullanmak istiyorsak “kapsanansınıf::parent::metot” şeklinde kullanabiliriz.


Hiç yorum yok: