Anasayfa > Dökümanlar > PHP ile nesne yönelimli programlama

PHP ile nesne yönelimli programlama

Çok biçimlilik(polymorphism)

Nesne yönelimli bir dil farklı sınıfların aynı işlem için farklı davranışlara sahip olabilmesi özelligini

destekler.Çok biçimlilik nesnelerden çok davranışlara dair bir özelliktir.Phpde sadece sınıfın üye

fonksiyonları çok biçimli olabilir.

Reel hayattan bir örnek vereyim.Arabanızı yıkayabilir ,tamir edebilirsiniz, hareket ettirebilirsiniz vs vs.


Kalıtım

Kalıtım ( inheritance ),alt sınıflar (subclass) kullanarak sınıflar arasında baglanrı kurmamızı

saglamaktadır.Bir alt sınıf kendi üst sınıfından nitelikleri ve işlemleri devralır.

örnek verelim daha iyi anlayacaksınız.

örnek= araba ve bisikletin düşünürseniz birbirine benzeyen özellikleri vardır.

renk niteligi,haraket etme özelligi gibi işlevlerin içinde oldugu bir sınıf oluşturulabilir.

sadece bisiklet ve arabanın taşıt sınıfından nitelik alması saglanabilir.

Kalıtım ile mevcut sınıfların üzerine eklemeler yapabilirsiniz.Basit bir sınıftan ihtiyaç

duyuldukça daha karmaşık bir sınıf türetrebilirsiniz.Böylece kodunuzun daha fazla yeniden

kullanılacak ve buda nesne yönelimli programlanın en önemli özelligidir.

Bir sınıfın yapısı

En küçük sınıf tanımı örnekte gördügünüz gibidir.

örnek:

class classınismi
{
}

kullanılışlı olmaları için sınıfların niteliklerine ve işlemlere gerek vardır.

nitelikleri var anahtar sözcügünü kullanarak bir sınıf tanımı içinde degişkenler tanımlayarak

oluşturabiliriz.

örnek:

class classınismi

{
var $kanur1;
var $kanur2;
}

Bu kod sayesinde iki niteligi olan classınismi adında bir sınıf oluşturmuş olduk.

Yapılandırıcılar( constructor )

Yapılandırıcı bir nesne oluştururken çagrılır ve neteliklere anlamlı başlangıç degeri vermek için

kullanılır.Bir yapılandırıcı diger işlemlerle aynı şekilde tanımlanır ama özel bir adı vardır.

__construct() bu olay ilk defa php5 de olan degişikliktir önceden sınıfla aynı ismi alırdı

yapılandırıcı methotlar.

örnek:

class classismi

{
function __construct($param)
{
echo "Yapılandıcı parametre ile çagrıldı $param <br />";
}

}

Yok ediciler(destructor)

Yapılandırıcının karşıtı yok edicilerdir.Yok ediciler ilk kez php5 de sunulmuştur.

yok ediciler parametre alamazlar. Bir sınıfın yok edicisi __destruct() dur.

Phpde kalıtımın uygulanması

Eger sınıfınız başka bir sınıfın alt sınıfı olacaksa bunu belirtmek için extends anahtar

sözcügünü kullanmalısınız.

şimdi bir örnek yapalım daha iyi anlayacaksınız.

örnek:

class kanur extends kanur1
{
publıc $cw2;
function operation2;
{
}
}

kanur1 sınıfını bu şekilde ilan ettiyseniz

class kanur1
{
publıc cw1;
function operation1();
{
}
}

kanur tipindeki bir nesnenin işlemleri ve nitelikleri için aşşagıdaki erişimler geçerlidir

$b= new kanur();
$b-> operation1();
$b-> cw1=12;
$b-> operation2();
$b-> cw2=14;

Kalıtım sadece tek yönde işlendigine dikkat etmeliyiz.

Mesela siz babanızdan size özellikler geçmiştir ama sizden babanıza özellik geçemez.

Kalıtımı devre dışı bırakmak (overriding)

1.) Bir alt sınıfın içindeki nitelige kendi üst sınıfı içindeki aynı nitelige göre farklı bir varsayılan deger

vererek gerçekleştirilir.

2.) Altsınıftaki bir işleme ( operation ) üst sınıftaki aynı işlemden farklı bir işlevsellik vererek

gerçekleştirilir.

Örnek yapalım daha iyi anlayacaksınız.

class A
{
function fonksiyon1()
{
echo “A sınıfındaki fonksiyon1 işletildi.<br/>”;
}

function fonksiyon2()
{
echo “A sınıfındaki fonksiyon2 işletildi.<br/>”;
}
}

class B extends A
{
function fonksiyon1()
{
echo “B sınıfındaki fonksiyon1 işletildi<br/>”;
parent::fonksiyon1();
}
}

B yi ilan etmek A’nın orjinal halini degiştirmez.

$a= new A(); // A tipinde bir nesne oluşturuluyor.
$a-> fonksiyon1(); // A’nın fonksiyon 1 fonsiyonu çagrılıyor.

Sonuç olarak bu yazıyı yazar ve böylece B yi oluşturmanın A’yı degiştirmedigi görülür..

“A sınıfındaki fonksiyon1 işletildi”

Evet parent neki dediginizi duyar gibiyim.

parent anahtar sözcügü işlemin sizdeki orjinal versiyonunu çagırmak için kullanılır. ( baba -cocuk)

final kullanarak kalıtımı ve overriding’i engellemek

final anahtar sözcügü ilk kez php 5 de sunulmuştur.

Bu anahtar sözcügü bir fonksiyonun deklarasyonunun önüne koyarsanız bu fonksiyon

hiç bir alt sınıfta devre dışı bırakılamaz.

class A
{

Publıc $kanur=’ Cyber-warrior ’;
final   function fonksiyon1()
{
echo “A sınıfındaki fonksiyon1 işletildi.<br/>”;
}
}

Bu yazdıgımız kod sayesinde B sınıfındaki fonksiyon2()’yi devre dışı bırakmanız önlenir.

final anahtar sözcügü bir sınıfın alt sınıflarının oluşturulmasını ömlemek içinde kullanılır.

 

Statık sınıf sabitlerini kullanmak ( per-class constants)

İstediginiz bir sabiti ilgili sınıfı tanımlamadan kullabilirsiniz.

örnek;

<?php
class math

{
const pi=3.14159;
}
echo ’math::pi=’.math::pi.”\\n”;

?>

Örnektede gördügünüz gibi sınıfa ait olan sabite sabitin ait oldugu sınıfı belitmek için ::

operatörünü kullanarak erişimi gerçekleştirdik.

Statik Methotları uygulamak

php5 statıc anahtar sözcügünüde desteklemektedir.

bu anahtar sözcük ne işe yararki dediginizi duyar gibiyim .

Methotlara uygulandıgında ,bu methotların ilgili sınıfın örneginin oluşturulması

gerekmeden erişime izin verir.

Önceki örnekteki math methoduna squared() fonksiyonu ekleyerek

bu sınıfın örnegini oluşturmadan çagırabilirsiniz.

örnek;

class

{
statıc function squared($input)
{
return $input*$input;
}
}
echo Math::spuared(7);

Statik bir methodun içinde this anahtar sözcügünü kullanamassınız

çünkü başvuruda bulunulacak bir nesne mevcut olmayabilir.

Nesneleri klonlamak

Mevcut bir nesneyi klonlamak için kullandıgımız clone anahtar sözcügü ilk

php5 de karşımıza çıkmıştır.

örnek;

$c= clone $b;

Açıklama:Yaptıgımız örnekte $b nesnesinin aynı sınıfta

bulunan ve aynı nitelik degerlerine sahip olan bir kopyasını oluşturduk..

_autoload() Kullanmak

Bu bir sınıf methodu degil bagımsız bir methotdur yani bunu herhangi bir sınıf

deklarasyonunun dışında deklare edersiniz.

_autoload()’u genellikle istenen sınıfın örneginin oluşturulması

için gereken dosyaları dahil etmek için kullanırız.

örnek;

function _autoload($name)
{
include_once $name.’.php’;

}

açıklama: Bu yaptıgımız örnekde aynı adlı dosyaları dahil ettik.

Kategoriler:Dökümanlar Etiketler:, , , , ,
  1. Henüz yorum yapılmamış.
  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: