Php ile Nesnel Programlama – 3

Tarih: Şubat 28th, 2009 | Yazar: | Kategori: Php | Etiketler: , , , , , , , , | 11 Yorum »

Selam dostlar. Bugün Php ile nesnel programlama dersimizin sonuna geldik. Birçok kişinin anlamadığı,nedir OOP dediği şeyin hepsi bu! Evet geriye birkaç veri tanımlama ve sınıf genişletme kodları kaldı ki onlarda şimdiye kadar öğrendiklerimizden daha kolay…

Umarım herkesin OOP konusunda yeteri kadar bilgisi olmuştur. Abartılan konunu bundan ibaret olmadığını görmenizi istiyordum ve başardım. Oldukça sade bir şekilde tüm nesnel programlama konusunu bitirdik. Dediğim gibi herkes bundan sonra kendi sınıflarını oluşturabilir. Mesela ben çoktan önbellekli bir mysql sınıfı yazdım bile!

Evet… Şimdi diğer dersimizde nerede kaldığımızı bir hatırlayalım;

index.php;

<?php
require "sinif.php";
$mysql_islemler = new mysql_islem("localhost","root","","class");
$mysql_islemler -> yazdir();
?>

sinif.php;

<?php class mysql_islem {
var $alinan_host_adresi;
protected $alinan_kul_ad;
private $alinan_sifre;

function mysql_islem($host_adresi,$kul_ad,$sifre,$db_adi) {
$this->alinan_host_adresi = $host_adresi;
$this->alinan_kul_ad = $kul_ad;
$this->alinan_sifre = $sifre;
@$baglan=mysql_connect($hostadresi,$kul_ad,$sifre) or die ("Mysql");
@mysql_select_db($db_adi,$baglan) or die ("Db");
}
private function yazdir() {
echo $this->alinan_host_adresi;
echo $this->alinan_kul_ad;
echo $this->alinan_sifre;
}
}
?>

Şimdi arkadaşlar en son sizlere güvenli – güvensiz şekilde tanımlamalardan bahsetmiştim. O zaman gereksiz birkaç bölümü kaldıralım veya anlam kazandıralım. Mesela sinif.php kodlarında yazdir isimli fonksiyonu mysql_bilgileri olarak değiştirin. En azından anlamlı çalışalım…

Arkadaşlar bazı durumlarda sınıflarınız oldukça büyüyebilir. Bazende verilerin işleyişini değiştirmek isteyebilirsiniz. İşleyişten kastım; diyelim birincisi mysql ile alakalı bir sınıfdır fakat öyle bir fonksiyon gerekirki toplama çıkarma yapmanız istenir. İşte o zaman yeni bir sınıf yaratın. Aksi takdirde performans düşebilir.

Peki yeni sınıf yaratmak istiyoruz. Ama mysql sınıfındaki veriler burada da bize gerek. Tekrar veri tanımlaması mı yapacağız? Tabi ki hayır. Sınıfımıza bağlı yeni bir sınıf yaratabiliriz. Bu durumda aynı diğer derste anlattığım gibi private olarak tanımlanmış tüm değişkenlerin dışında bütün veriler yeni eklenen sınıfta da kullanılacaktır. O zaman mysql sınıfımıza birde bu verileri ekrana şifreli bir şekilde yazdıran sınıf ekleyelim. Demek istediğim mysql isimli sınıfımıza ek sınıf ekleyeceğiz ve amacı localhost değişkenini md5 leyip ekrana basmak.

Şimdi neler yapmalıyız bilmemiz lazım. Birincisi mysql isimli sınıfımıza bağlı yeni bir sınıf yaratıcaz. İkincisi bu sıfımıza $alinan_host_adresi isimli değişkeni çekip md5 licez ve ekrana basıcaz. O durumda bir üst sınıftaki veriye ulaşmamız gerekiyor değil mi? Örnek olarak şu kodları çalıştırın;

index.php;

<?php
require "sinif.php";
$mysql_islemler = new mysql_islem("localhost","root","","class");
$hostu_al = new sifreli_host();
?>

sinif.php;

<?php
class mysql_islem {
var $alinan_host_adresi;
protected $alinan_kul_ad;
private $alinan_sifre;

function mysql_islem($host_adresi,$kul_ad,$sifre,$db_adi) {
$this->alinan_host_adresi = $host_adresi;
$this->alinan_kul_ad = $kul_ad;
$this->alinan_sifre = $sifre;
@$baglan=mysql_connect($host_adresi,$kul_ad,$sifre) or die ("Mysql");
@mysql_select_db($db_adi,$baglan) or die ("Db");
}
private function mysql_bilgileri() {
echo $this->alinan_host_adresi;
echo $this->alinan_kul_ad;
echo $this->alinan_sifre;
}
}
class sifreli_host extends mysql_islem {
function sifreli_host() {
echo md5($this->alinan_host_adresi);
}
}
?>

Gördüğünüz gibi kodumuzu bir üst sınıf olan mysql_islem isimli sınıfımıza bağladık. Bu sayede mysql_islem isimli sınıftaki private olarak tanımlanmamış olan tüm değişkenleri içeride kullanma hakkına sahip olduk. Sonra sifreli_host isimli sınıfımızda, sınıfın ismi ile aynı olan bir fonksiyon yarattık ki index.php de class tanımlandığı anda işlemler çalışmaya başlasın diye. Neyse en sonunda da host adresini md5 leyip erkana yazdırdık. Eğer bu kodu çalıştırırsanız; d41d8cd98f00b204e9800998ecf8427e çıktısı alırsınız.

Evet arkadaşlar buraya kadar sorun yoksa şimdi static türündeki değişkenleri görelim. Static kelimesinin Türkçe karşılığı “sabit” tir. Sınıflarda da buna benzer şekilde kullanılır. Eğer ki bir veriyi static yaparsanız o zaman tekrar dan çağırmanız gerekmez. Bu konuyu daha iyi anlamak için;

index.php;

<?php
require "sinif.php";
$mysql_islemler = new mysql_islem("localhost","root","","class");
$hostu_al = new sifreli_host();
$hostu_al->sinif_yazari();
?>

sinif.php;

<?php
class mysql_islem {
var $alinan_host_adresi;
protected $alinan_kul_ad;
private $alinan_sifre;
static $sinif_yazari="Ertuğrul Erkan";

function mysql_islem($host_adresi,$kul_ad,$sifre,$db_adi) {
$this->alinan_host_adresi = $host_adresi;
$this->alinan_kul_ad = $kul_ad;
$this->alinan_sifre = $sifre;
@$baglan=mysql_connect($host_adresi,$kul_ad,$sifre) or die ("Mysql");
@mysql_select_db($db_adi,$baglan) or die ("Db");
}
private function mysql_bilgileri() {
echo $this->alinan_host_adresi;
echo $this->alinan_kul_ad;
echo $this->alinan_sifre;
}
function buyuk_yazdir() {
return strtoupper(self::$sinif_yazari);
}
}
class sifreli_host extends mysql_islem {
function sifreli_host() {
echo md5($this->alinan_host_adresi)."<br>";
}
function sinif_yazari() {
echo mysql_islem::buyuk_yazdir();
}
}
?>

Şimdi kodları çalıştırdığınızda; d41d8cd98f00b204e9800998ecf8427e ERTUGRUL ERKAN çıktısı alırsınız. Peki burada ne yaptık? Öncelikle static bir değişken tanımladık ve bu değişkene değer atadık. Sonra buyuk_yazdir isimli fonksiyonu kurduk. Eğer ki dikkat ettiyseniz static değişkenlerin :: ile çağrıldığını da fark ederseniz. Eğer ki static olan değişken o sınıfın içerisinde ise self, başka bir sınıftan, diğer sınıf içerisindeki static değişkene ulaşıyorsak üst sınıfın adını veririz. $this o diyerek değişkenleri işaret ederdi. İşte static verilerde böyle işaret edilir…

Ardından alt sınıfımızda sınıf yazarımız yazdırılıyor; fakat yukarıdaki sınıfımız içerisindeki buyuk_yazdir ın işlemleri ile. Static veriler de eğer ki bir kere işaret ettiyseniz onun dışarıdan çağrılmasına gerek yoktur. Yani sinif_yazari isimli fonksiyonu çağırırsak onun :: ile işaret ettiği tüm fonksiyonlarda çalışır. Gördüğünüz gibi birkaç konuyu bir anda çözdük…

Evet arkadaşlar OOP derslerimiz sonunda bitti. Bundan sonra da aklıma geldikça yazacağım fakat işin en önemli kısımları son bulmuş durumda. Bundan sonra kendiniz kolayca ilerleyebilirsiniz…

Herkese iyi günler, iyi çalışmalar…




Benzer Yazılar;

coded by nessus

“Php ile Nesnel Programlama – 3” yazısında 11 Ahkam var.

  1. 1 Webdesen 17:27 on Mart 13th, 2009 anında kesmiş:

    Çok teşekkürler, oldukça faydalı bir makale. Şimdiğe kadar gördüğüm en iyi kaynak.. ;)

  2. 2 Hasan 16:37 on Eylül 13th, 2009 anında kesmiş:

    Selam Ertuğrul.

    Mesela ben çoktan önbellekli bir mysql sınıfı yazdım bile!

    önbellekli deki kastın nedir aklımda bi kaç ışık uyandı , phpde yeniyim . konuyu biraz açabilirmisin.

  3. 3 Ertuğrul Erkan 16:41 on Eylül 13th, 2009 anında kesmiş:

    @Hasan;

    Merhaba. Ben burada Bmysql isimli bir sınıf paylaşmıştım. İşte bu Bymysql sınıfı yukarıda bahsettiğim sınıfın “lite” versiyonu gibi birşey. Önbellekten kastım sürekli Mysql’ den verileri çekip, trafik yaratmak yerine txt dosyalarına verileri aktarıp, belirli süre boyunca sadece oradan çekmek anlamına geliyor. Birde tarayıcı önbelleği vardır ki bu header(); fonksiyonu ile yapılır..

    İyi günler..

  4. 4 Hasan 20:01 on Eylül 13th, 2009 anında kesmiş:

    Çok teşekkür ediyorum Ertuğrul;

    Aslında işin server side tarafıyla yaklaşık 1 aydır ilgileniyorum , asıl işim bu olmamasına rağmen , büyük bir projeye el atmayı pilanlıyorum (kendi projem ).

    Mysql veriyi çekip text e aktarıp ordan çekmek cok mantıklı bir yol.

    Örn : Her sayfada kullandığım bir dizi metinleri kopyasını text ten çekip yükleyeceğim diyelim fakat her sayfada text dosyasını yükleyip pars etmesi yerine tarayıcının belleğinden çekmesi işleyiş açısından daha hızlı olabilceğini düşünüyorum.

    header(); la tarayıcı belleğinde veri tutma konusu php de tam olarak nasıl geçiyor araştırdım biraz ama tam neticeye ulaşamadım.

  5. 5 Ertuğrul Erkan 20:09 on Eylül 13th, 2009 anında kesmiş:

    Tekrar merhaba. Aslında bu tamamen bir makale konusu fakat burada şöyle kısaca anlatayım.

    Birçok cache sistemi zaten txt üzerine kuruludur. Aslında sql sistemleride bir çeşit dosya kullanırlar ama SQL->DOSYA bağlantısı kurmak gerekir. Biz ise cache için sadece DOSYA bağlantısı kurarız. ( SQL->DOSYA burada bildiğimiz Mysql )

    Txt dosyalarını açıp kapamak daha hızlı olduğu için bu yol seçiliyor. Hatta bir sql sorgusunun 30 adet txt işlemine eşit olduğu söyleniyor.

    header() kısmına gelirsek Php.net üzerinde bulunan bu kod açıklayıcı olacaktır;

    < ?php
    // seconds, minutes, hours, days
    $expires = 60*60*24*14;
    header("Pragma: public");
    header("Cache-Control: maxage=".$expires);
    header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expires) . ' GMT');
    ?>

  6. 6 Hasan 16:11 on Mart 26th, 2010 anında kesmiş:

    Süpersin, tek kelime..

  7. 7 nesne yönelimli programlama ve php | .:: www.selmantunc.com ::. 02:25 on Temmuz 18th, 2010 anında kesmiş:

    [...] Php ile Nesnel Programlama – 3 [...]

  8. 8 Haci 23:56 on Mart 29th, 2011 anında kesmiş:

    Tüm paylaşımnlar için teşekkür ederim emeklerine sağlık…
    Bundan sonraki yaılarda OOP ile güvenlik sağlanması üyelikler gibi örnekler yayınlarsanız çok sevinirim :)

  9. 9 ismail fedakar 16:22 on Mayıs 30th, 2011 anında kesmiş:

    Değerli kardeşim oop dersleri gerçekten süper olmuş. PHP konusunda bir sürü kitap okudum ama senin verdiğin şu bir kaç sayfalık php bilgisi hapsine bedel oldu. Çok teşekkür ediyorum. Class lar konusunda bir kaç ders daha ekleyebilirsen gerçekten sevinirim.
    Kolay Gelsin.

  10. 10 ismail fedakar 16:26 on Mayıs 30th, 2011 anında kesmiş:

    Ertuğrul kardeş.;
    Özellikle this komutu ve parent komutlarının işleyişi hakkında daha ayrıntılı bir iki makale yazarsan inanki bana ve benim gibi this ve parent komutlarının işleyişini tam olarak anlayamayan arkadaşlara çok faydalı olacaktır.
    Önreğin ben bu makaleyi okumadan önce this komutuna okadar kafayı taktımki 2 ay boyunca bu komutu anlamaya çalışmakla uğraştım fakat sen imdadıma yetiştin.
    Çok Sağol.

  11. 11 Kohana’ya başlamadan önce php ile nesne yönelimli programlama | Kohana Türkiye 23:40 on Aralık 5th, 2011 anında kesmiş:

    [...] Php ile Nesnel Programlama – 3 [...]


Ahkam Kesme Aparatı

  • *