“Sınanmadığın günahın masumu sanma kendini”
by Sadi şirazi

Php de Zincirleme Yöntemi

Tarih: Mart 20th, 2010 | Yazar: | Kategoriler: Php | Etiketler: | Yorum Yok »

Birçok nesne tabanlı programlama dilinde uygulanan Zincirleme Yöntemini Php de nasıl yapacağımızı anlatmaya çalışacağım, bu yazımda.

Zincirleme yönetimi bir tanımlama ile birden çok fonksiyonu çalıştırmamızı sağlar. Şimdi aşağıdaki örnek sınıfımıza bir göz atalım.
Örnek Sınıfımız

class Kullanici
{
	private $ad = null;
	private $soyad = null;
	private $yas = null;
	
	public function setAd($ad)
	{
		$this->ad = $ad;
		return $this;
	}
	
	public function setSoyad($soyad)
	{
		$this->soyad = $soyad;
		return $this;
	}
	
	public function setYas($yas)
	{
		$this->yas = $yas;
		return $this;
	}
	
	public function getBilgiler()
	{
		echo 'Ad: ' . $this->ad . ' Soyad: ' . $this->soyad . ' Yas: ' . $this->yas;
	}
} 

Sınıfımızı zincirleme yöntemi kullanmadan kullanalım.

$kullanici = new Kullanici();
$kullanici->setAd('Can');
$kullanici->setSoyad('Aydoğan');
$kullanici->setYas(21);
$kullanici->getBilgiler();

Gördüğünüz gibi her ayar için yeni bir tanımlama yaptık. Pek pratik bir yöntem değil haliyle.
Sınıfımızı zincirleme yöntemi kullanarak kullanalım.

$kullanici = new Kullanici();
$kullanici->setAd('Can')->setSoyad('Aydoğan')->setYas(21)->getBilgiler();

Gördüğünüz gibi tek tanımlama ile hem ayarlarımızı gerçekleştirdik hem çıktımızı aldık. Peki bunu nasıl yaptık? Cevabı çok kolay setAd, setSoyad ve setYas fonksiyonlarında dönen değer olarak $this değişkenini tanımladık. Yani sınıfımızı kendisini dönen değer olarak döndürüyoruz. Dönen değer sınıfın kendisi olunca her fonksiyonun arkasından yeni bir fonksiyon tanımlamamız mümkün oluyor.


Googlebot Sitemizi Ne Zaman Ziyaret Etti Öğrenelim

Tarih: Mart 14th, 2010 | Yazar: | Kategoriler: Php | Etiketler: , | 2 Yorum »

Site sahipleri olarak hep merak ederiz Googlebot sitemize ziyaret etti mi ettiyse hangi sayfaları ne zaman ziyaret etti? Bu yazımda bu soruya Php ile cevap vermeye çalışacağım.

Bir ziyaretçi sunucuya istek gönderdiğinde yanında bazı bilgiler de gönderir. Bu bilgiler gelen olarak cookie ve tarayıcı ile ayarlardır. Bu bilgileri görüntülemek için aşağıdaki kodu kullanabilirsiniz.

<?php
print_r($_SERVER);
print_r($_COOKIE);
?>

Eğer yukarıdaki kodu çalıştırdıysanız karşınıza birçok veri listelenmiştir. Biz bu verilerden bir tanesi kullanarak Googlebot’un sitemize ziyaret edip etmediğini tespit edeceğiz. Kullanacağımız değişken $_SERVER[‘HTTP_USER_AGENT’]. Bu değişken  sayfamızı ziyaret eden tarayıcı ile ilgili bilgi veriyor. Googlebot’ları kullandığı tarayıcı ismi olarak  “Googlebot/2.1 (+http://www.google.com/bot.html)” bunu kullanıyor. Bizde bundan yola çıkarak Googlebot’un sitemizi ziyaretini tespit edeceğiz. Tespit ettikten sonra istediğiniz e-mail adresine mail gönderebilirsiniz.
Kodumuz aşağıda:

<?php
if (strpos( $_SERVER['HTTP_USER_AGENT'], 'Googlebot' ) !== false) {
//E-mail gönderiyoruz 
mail(
'email@adresiniz.com',
'Googlebot Sitenizi Ziyaret Etti!',
'Ziyaret edilen sayfa:' . $_SERVER['REQUEST_URI'] . ' Ziyaret saati' . date('Y-m-d h:m:s')
);
}
?>

Bu kodu kullandığınız scripte tüm sayfalarda çalışacak şekilde yerleştirirseniz Googlebot’un sitenizi ziyaret zamanına ve hangi sayfaları ziyaret ettiğini öğrenebilirsiniz.


Php de Passing By Reference ve Returning References

Tarih: Ocak 18th, 2010 | Yazar: | Kategoriler: Php | Etiketler: , , | 1 Yorum »

Bugün size karışık gibi görünen fakat oldukça basit bir konuyu yani passing by reference (gönderimle aktarım) ve returning references (gönderimle döndürme) anlatmaya çalışacağım. Öncelikle references ne olduğuna bakalım.

<?php
$a = 1;
$b = 2;
$a =& $b;
echo $a; //Ekrana 2 yazar
$a = 10;
echo $b; //Ekrana 10 yazar
$b = 20;
echo $a; //Ekrana 20 yazar
unset($a);
echo $b; //Ekrana 20 yazar
?>

Yukarıdaki kodu incelediğinizde fark edeceksiniz ki $a ve $b değişkenleri sanki birbirlerinin aynısı gibi davranıyorlar. Yani $a artarsa $b de aynı oranda artıyor veya $b azalırsa $a da aynı oranda azalıyor ve aynı değere sahip oluyor iki değişkende. Eğer daha önce references kullanmadıysanız fark edeceksiniz ki $a değişkenin $b değişkenine eşitlerken ve(&) karakterini kullanmışız. Ve karakteri ile $a değişkeninin $b değişkenin aynısı olmasını sağladık yani bellekte aynı bölgeyi iki farklı değişken ile işgal etmiş oluyoruz. Ama unset ile $a değişkenini yok ettiğimizde $b değişkenine birşey olmayacaktır. References değişkenlerde kullanımı bu şekilde. Şimdi fonksiyonlardaki argüman atamalarında yani passing references da durum nasıl onu inceleyelim.

<?php
function foo(&$b)
{
    $b++;
}
$a = 1;
foo($a);
echo $a; //Ekrana 2 basar.
?>

Yukarıdaki argüman atamasında ise $b’nin önüne ve(&)  karakteri konuluyor bu sayede $b değişkenin ile $a değişkeni tamamen eşitleniyor. Yani  yukarıda yaptığımız passing by variable işlemini bir benzeri yapılış biçimi farklı olsa da yaptıkları iş birbirinin aynısı $b değişkeni artarsa $a değişkeni de aynı oranda artacaktır. Ve son olarak returning by references inceleyelim.

class foo {
    public $deger = 99;

    public function &getDeger() {
        return $this->deger;
    }
}

$obj = new foo;
$a = &$obj->getDeger();//$a değişkenine returning references uyguladık.
$obj->deger = 100;
echo $a;//Ekrana 100 basar

Burada ise $a değişkenini getDeger fonksiyonundan dönen değer ile eşitliyoruz yani aynısı yapıyoruz. Bu sayede nesne içinden veya dışından $deger değişkeninde herhangi bir değişiklik yaptığımızda aynı değer $a değişkenimizede yansıyacaktır.  Bu sayede $deger değişkeninde ne olduğunu öğrenmek için nesne üzerinden çağırma yapmamıza gerek kalmıyor $deger değişkenindeki tüm veriyi $a değişkeni üzerinden kolayca görebilmekteyiz.