gklp blog

yoğunmuş…

PHP Method yönetimi ( OOP ) yazı dizisi – 2

without comments

Bugünkü yazıdan kısaca bahset gerekirsen; veri tabanından gelen değişkenleri sınıfımızdan dışarı aktarmak ve kullanmak olucak, bu yazıyı anlatırken bir veri tabanı ve bu veri tabanına bağlanmış bir sınıf olması lazım bunu önceden görmüştük, orayı inceleyerek bu paketi oluşturabilirsiniz.

Şimdi gelelim konumuza, ellerimizi bağladık okumaya başladık.

Temel olarak küçük bir kaç açıklık yapmak gerekirse:

public->heryerden ulaşılabilen” ,
private->class içinde ulaşabileceğiniz”

ilk olarak PHP5 ile gelen nesneye dayalı program için öncedende bildiğimiz gibi belli bir grammer yapımız var yani dil bilgisi. Şimdi eğer bir sınıf oluşturmak istiyorsak bu “class” kelimesi ile başlar eğer bir sınıf ile kalıtım sağlanacaksa “extends” kullanılır ve son olarak bir interface implement edilecekse “implements” kelimesi kullanılır.

Bir class n kadar interface alabilir fakat, 1 tane kalıtım ile sınıf alabilir. :D

Betik:

< ?php

// Bu kalıtımsız ve interface implement edilmemiş bir class.
class gokalp  {}

//Şimdi kalıtım alıyorum
class gokalp extends kuscu {}

//Şimdi interface alıyorum
class gokalp implements int1 {}

//Şimdi her iksinide alıyorum
class gokalp extends kuscu implements int1 {}

//Şimdi bir çok interface alıyorum
class gokalp extends kuscu implements int1 implements int2...n {}
?>

Evet arkadaşlar şimdi kısaca object oriented mantığındanda bahsedim şimdi ben kendi adımı kullanarak “gokalp” yani bir class oluşturdum kendimi modelledim, şimdi ailemdeki bazı özellikleri ben kendimde yeniden yazmaktansa ailemden kalıtım aldım ve kuscu ailesinde olan ve bendede olucak genetiksel özellikleri yeniden yazmak yerine ailem bana verdi :)

Interface konusuna fazla takmayın bence toplu proje geliştirme aşamasında gerçekten çok işe yaricak bir yapı fakat şuan sadece yazmak istediğim için yazdım. :D Bunun yanında soyut sınıfımızda var tabi ama onu 3. yazı dizisine saklayalım “abstract”.

Evet şimdi herşeyden biraz bahsettik ve mantığı vermeye çalıştık, tabi bu nesneye dayalı konusu bu bir kaç satır ile ifade edilecek kadarda kısa değil tabi ki.

< ?php
/**
* @author Gokalp Kuscu // www.gokalpkuscu.com
* @copyright 2009
*/

 class class_video extends database_functions {

  public function getVideo($id)
   {
    $sqlQuery = "SELECT
    videos.vID,
    videos.vFileName,
    videos.vLink,
    videos.vName
    FROM
    videos";

    if(isset($id) != null):
    //Gelen paramtere null değil, bu yüzden id ile birlikte bilgiyi getir.
    $sqlQuery.= " WHERE videos.vID = $id ORDER BY videos.vID DESC LIMIT 1";
    else:
    //Gelen parametre null bu yüzden tümünü getir. 10 adet getir sadece.
    $sqlQuery.= " ORDER BY videos.vID DESC LIMIT 10";
    endif;

    $r=parent::query($sqlQuery);
      while ($video = parent::database_fetch_array($r))
       {
        $video_buffer[] = array (
        'vID' => $video['vID'],
        'vLink' => $video['vLink'],
        'vName' => $video['vName'],
        'vFileName' => $video['vFileName']
        );
     }
    return $video_buffer;
  }
}
?>

Şimdi bu video getirme class için değerlendirme yazalım, bu benim eskiden yazdığım bir class, burda class içinde tam anlamıyla değişken yapılarını kullanmamışım ama böyle anladığımı ve anlicağınızı düşünerek böyle yazmak istedim.

Şimdi ilk olarak şunu söyleyelim, nerden kalıtım almışım database_functions, aslından arkaplanda database_function’da connection class’ından kalıtım alıyor ve encapsulation data hiding,private connection class vs.. ile yaptıracağım işin direk olarak veri tabanı ile haberleşmemesini sağlıyorum şöyle düşünün.

“Bir PHP web sayfası geliştirirken genelde bir tuşa basılır ve arka plan kod direk bunu veri tabanına yazar burda böyle olmuyor, ilk olarak class_video sınıfıma ulaşıyorum eğer gerekli kontroller yazılmışsa mesela Türkçe karakter sorunu veya xss atakaları bunları bu classım içinde süzgeçten geçiriyorum sonra veri tabanı kısmında çalışacak olan işçilerime veriyorum bu veri sağlam veya böyledir yaz diye onlarda veri tabanına yazıyor, böylece 3 katmanda işi yaptırmış oluyoruz sunum(janjanlı web sitemizin ara yüzü), iş katmanı(class_video) gerekli müdahaleler ve veri katmanı yaz abi bunu diye… ekstra bilgi idi :)

public function getVideo($id)

Public olan getVideo methoduna dışardan bir nesne ile ulaşalım şimdi.

< ?php 

include "class_video.php";

 class_video nesne = new class_video();

    //nesneye null değerini gönderiyorum.
    nesne.getVideo(null);

    //nesneye null değerini gönderiyorum.
    nesne.getVideo(1);
?>

ben sadece null işlemden bahsedim, null dediğimizde method içine giden null değerini zaten kontrol etmiştik, buna göre ya bir video yu getiriyordu id göre ya da null değer aldığında 10 tane video getiriyordu. null aldığı için 10 tane videoyu getirecek.Peki bunlara nasıl ulaşacağım ?

Şimdi ben burda şöyle bir mantık yürütmüşüm bir dizi açmışım ve bu dizi yapısını veri tabanı modeli gibi kullanmışım satırlar ve sütunlar, hemen açıklayayım,


$video_buffer[] = array (
'vID' => $video['vID'],
'vLink' => $video['vLink'],
'vName' =>  $video['vName'],
'vFileName' => $video['vFileName']
);

Burda açığım diziye her gelen satırımdaki veriyi satır olarak alıp bir indis atıyorum, mesela,

1. için vID[0] vName[0]
2. için vID[1] vName[1]
3. için vID[2] vName[2]

Methodumda dizimi attım, nesneden çağırdım, geriye ne döndürmeli ? :) tabi ki bu diziyi bu dizi döndüğünde işlemimiz bitmiş olucak hemen ona bakalım.

< ?php

include "class_video.php";

   $nesne = new class_video();

    //nesneye null değerini gönderiyorum.
    $sonuc = nesne.getVideo(null);

    //nesneye null değerini gönderiyorum.
    $sonuc = nesne.getVideo(1);

    //diziye bakmak istersek, tüyo
    print_r($sonuc);

    //şimdi deşkenleri alalım, ben sadece vName leri basacağım.
    for($i=0;$i<=count($sonuc)-1;$i++)
       print($sonuc[$i]['vName']);           

?>

Evet arkadaş bir soru, sıkıntı olursa paylaşalım :) bu arada bu classların içindeki syntax yapısını bilmiyorsanız en basitinden php için bilmiyorsanız sıkıntı yaratabilir, mesela “parent” extend ettiğin classın methodlarını çağırmak içindir vs gibi….

Sevgi ve saygılarımla
gökalp kuşçu

Bunlarda paylaşabilirsin...
  • Print this article!
  • MySpace
  • Twitter
  • Technorati
  • MyShare
  • Ping.fm
  • Reddit
  • RSS
  • Socialogs
  • del.icio.us
  • Facebook
  • Faves
  • Google Bookmarks
  • HackerNews

bir yorum yaz: