Php ile Nesnel Programlama – 2

Tarih: Şubat 26th, 2009 | Yazar: | Kategori: Php | Etiketler: , , , , , , , , | 2 Yorum »

Merhaba arkadaşlar. Dün başlayan yazı dizimiz hakkında gerçektende çok olumlu geri dönüşler aldım. Özellikle nesnel programlama nedir, class nedir, fonksiyonları nasıl toparlarız gibi soruların hepsi cevap bulmuş. Ee tabi ki hoşuma gitti. Bugün yine sınıflarda kullanılan güvenlik amaçlı yaratılmış veri tanımlamalarını işleyeceğiz.

Hızlı bir giriş olmasına rağmen yine de birçok kişi sınıfların mantığını kavramış. Ayrıca Mysql sınıfımızı da beğenmişler. Abartmaya gerek yok aslında çünkü sadece veritabanına bağladık. Fakat bugün veritabanına veri gireceğiz. Ve aynen dediğim gibi daha da güvenli bir şekilde olacak…

Tekrar merhaba arkadaşlar. Hatırlarsanız dün en son burada kalmıştık;

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

Şimdi bu kod tek başına şu şekilde veriler verirsek (index.php);

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

Hem mysql e bağlanacak hem de ekrana localhost yazdıracaktır. Burada global değişkenler yani genel bir değişken sayesinde tüm class içerisinde veriyi kullanabiliyoruz. Peki bir hacker shell denilen bir sistemi hostumuza attı ve önceden belirlediğimiz bir veriyi yazdırdı. İşte O zaman ne yapacağız? Bunun içinde değişken ve fonksiyon tipleri var.

Her değişken temel de public yani paylaşılabilir olarak tanımlanır. Biz değişkenleri var olarak tanımlarken okuyucular var ı public şeklinde değiştirirler. İşte sırf bu yüzden public i tekrar yazmamıza gerek yok. Fakat protected veya private dememiz gerekirse belirtiyoruz. Protected demek o değişkenin sadece bulunduğu sınıf ve o sınıfın dahilindeki sınıflarda kullanılabileceğini belirtir. Yani dışarından ulaşılamaz. Eğer ki private dersek sadece bulunduğu sınıf içerisinde kullanılır. Bu sayede geniş ölçekli bir koruma elde edilmiş olur. Mesela bu kod;

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

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

Yukarıda verdiğim kod index.php de şu şekilde çalıştırıldığında;

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

Aynen şu hataları verir;

Fatal error: Cannot access private property mysql_islem::$alinan_sifre in C:\AppServ\www\class\index2.php on line 4

Fatal error: Cannot access protected property mysql_islem::$alinan_kul_ad in C:\AppServ\www\class\index2.php on line 5

Çünkü onlar sadece sınıflar içerisinde kullanılabilir. İşte buraya kadar değişkenlerde güvenlik olayları geçtik. Şimdi fonksiyonlara bakalım. Şimdi arkadaşlar index.php mize şu kodları eklediğimizde;

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

Ekrana tamamen güvenliksiz olarak; localhostroot(boşluk) yazdıracaktır. İşte bu gibi durumlar için fonksiyonlara da güvenliksel tanımlamalar atayabiliriz. Her fonksiyon temelde aynı değişkenler gibi public yani paylaşılabilir olarak işlem görür. İstersek sonradan private veya protected atamaları yapabiliriz. Mesela şu kodlar;

<?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;
}
}
?>

Aynen yukarıda verdiğim index.php gibi kullanıldığında hata verecektir. Çünkü fonksiyon paylaşıma kapalıdır ve dışarından bilgi alınamaz…

Arkadaşlar şimdilik bu kadar. Diğer derste statik veriler, sınıfların genişletilmesi başlıklarını işleyip tamamen bitireceğiz…

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




Benzer Yazılar;

coded by nessus

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

  1. 1 İbrahim 10:58 on Nisan 4th, 2011 anında kesmiş:

    bu konuyu tam olarak anlayamadım, bir önceki arkadaşın dediği gibi biraz önbilgi verilse daha iyi olur kanaatindeyim.

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

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


Ahkam Kesme Aparatı

  • *