Aylık Arşiv: Temmuz 2012

PHP – Fluent Interface Design Pattern

Fluent Interface sözcük öbeğinin aşağı yukarı Türkçe karşılığı akıcı arabirim veya akıcı arayüz anlamlarına geliyor.

Fluent Interface bir Object Oriented Programming (OOP) design pattern (tasarım deseni)’dır.

Fluent Interface bazı yerlerde metod zincirleme olarak da geçebilir.

Peki bu design pattern’ın yapısı nasıldır?

Şimdi basit bir Class yazalım.

class Ogrenci{
    
    public function setAd($ad){
        $this->_ad = $ad;
    }
    
    public function setSoyad($soyad){
        $this->_soyad = $soyad;
    }
    
    public function setDogum($DogumTarihi){
        $this->_DogumTarihi = $DogumTarihi;
    }
    
    public function getOgrenci(){
        return $this->_ad . " " . $this->_soyad . " " . $this->_DogumTarihi;
    }
}

Bu Class’a yapılacak olan Set ve Get işlemi şöyle olabilir:

$ornek = new Ogrenci;
$ornek->setAd('Ali');
$ornek->setSoyad('Demir');
$ornek->setDogum('2002');
echo $ornek->getOgrenci();

Gördüğünüz gibi her set işleminde $ornek değişkenini yazıyoruz. Ama Martin Fowler ve Eric Evans isimli iki abimiz bunları daha okunabilir şekilde yazabiliriz demişler. Kendilerine bu yöntem için bu yazı aracılığı ile de teşekkürler.

Yani şöyle, yukarıdaki Class’ı şöyle düzenliyoruz:

class Ogrenci{
    
    public function setAd($ad){
        $this->_ad = $ad;
        return $this;
    }
    
    public function setSoyad($soyad){
        $this->_soyad = $soyad;
        return $this;
    }
    
    public function setDogum($DogumTarihi){
        $this->_DogumTarihi = $DogumTarihi;
        return $this;
    }
    
    public function getOgrenci(){
        return $this->_ad . " " . $this->_soyad . " " . $this->_DogumTarihi;
    }
}

Yeni Class’da ki set işlemlerine return $this; eklendi.

Artık set işlemlerini şöyle yapabiliriz:

$ornek = new Ogrenci;

$ornek->setAd('Ali')
      ->setSoyad('Demir')
      ->setDogum('2002');

echo $ornek->getOgrenci();
 
11 Kudos
Don't move

Dropbox’ı SVN Reposu Olarak Kullanma

Dropbox hesabınızı SVN veya Git reposu haline çevirebilirsiniz. Bu yazıda Dropbox’ı SVN reposu haline getirmekten bahsedeceğim…

mkdir ~/Dropbox/ornekRepo
cd !$
svnadmin create .

Böylece Dropbox’da ornekRepo dizini SVN reposu haline geldi.

Şimdi checkout yapalım.

mkdir ~/calismalarim
cd !$
svn checkout file:///home/$USER/Dropbox/ornekRepo

SVN reposu checkout edildi. Şimdi örnek bir commit yapalım.

cd ornekRepo
mkdir ilkcommit
cd !$
echo "ornek mesaj" >> deneme.txt
cd ..
svn add ilkcommit
svn commit -m 'ilk commit mesajim'

ve commit’de yaptık. Bu kadar :)

Test için:

mkdir ~/testrepo
cd !$
svn checkout file:///home/$USER/Dropbox/ornekRepo
cd ornekRepo
ls
 
3 Kudos
Don't move

Sitenin iFrame İçerisinde Açılıp Açılmadığının Kontrolü

Twitter, GitHub gibi siteler iFrame içerisinde doğrudan gösterilemezler. Bu diğer sitelerin kontrolü için şöyle bir yöntem uygulayabilirsiniz.

Eğer herhangi bir site header bilgilerinde X-Frame-Options anahtarına DENY veya SAMEORIGIN değerini gönderiyorsa o site iFrame içinde açıl(a)maz.

Bunun için öncelikle siteyi iFrame’de açmadan önce header bilgilerini çekip. Aşağıdaki RegEx pattern’ı ile X-Frame-Options kontrolü yapmalısınız.

[X\-Frame\-Options:\s](DENY|SAMEORIGIN|NONE)

PHP’de get_headers() ve cURL’ün CURLOPT_HEADER değerleri ile header bilgilerini alabilirsiniz.

Python’da request kütüphanesinin headers özelliğini kullanabilirsiniz…

Not: Bir sitenin HTTPS olması (SSL) o sitenin iFrame içerisinde açılmasına engel değildir.

 
20 Kudos
Don't move