Php ile Nesnel Programlama – 3
Tarih: Şubat 28th, 2009 | Yazar: Ertuğrul Erkan | Kategori: Php | Etiketler: nesne tabanlı programlama, nesnel programlama, oop, Php, php derslerim, php ile fonksiyon, php ile nesne, php ile nesne tabanlı programlama, php oop | 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;
- Php ile Nesnel Programlama - 2
- Video Ders: Php ile OOP Programlama Bölüm 1
- Php ile Nesnel Programlama - 1
- Fonksiyonlarda Return Komutu ve Kullanımı
- OOP Nerede ve Ne Zaman Gereklidir?

Çok teşekkürler, oldukça faydalı bir makale. Şimdiğe kadar gördüğüm en iyi kaynak..
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.
@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..
Ç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.
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');
?>
Süpersin, tek kelime..
[...] Php ile Nesnel Programlama – 3 [...]
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
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.
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.
[...] Php ile Nesnel Programlama – 3 [...]