PHP Anonim fonksiyonlarda closure(kapaklar)

Bir Anonim fonksiyon, bir değişkene atanabilen veya başka bir fonksiyona argüman olarak geçirilebilen isimsiz bir fonksiyondur. Anonim bir fonksiyon, sadece adı olmayan bir fonksiyondur.

Düzenli bir fonksiyon tanımladığınızda ona bir ad verirsiniz. Temel fark isminden de anlaşılacağı üzere Anonim fonksiyonlar olmasıdır, yani fonksiyonun adı yoktur. Anonim fonksiyon nasıl tanımlanır:


function ($parametre1, $parametre2){

//Kodlar...

}

//değişkene atanmış hali

$Selam = function ($parametre1, $parametre2){

//Kodlar...

};

Anonim Fonksiyonlarda Closure(Kapaklar)


PHP'de kapaklar sayesinde genel, özel ve ayrıcalıklı üyeler mümkündür. Dış fonksiyonun değişkenlerine erişebilmesi için Dış fonksiyonun içindeki bir isimsiz fonksiyonu Return edin. Bu bir closure(kapaklar) fonksiyon olarak bilinir.

Kapaklar(closure) Javascript'te oldukça yaygındır, bu yüzden fonksiyon içinde basit bir kapak oluşturalım ve nasıl davrandığını görelim:


var addOne = function(num) {
    return function() { 
        console.log(num++); 
    };
};

var f = addOne(1);

f(); // 1
f(); // 2
f(); // 3

Fonksiyonların görevi tamamlanınca değişkenler hafızadan silinir. Global değişkenler proğram çalıştıkca yaşarlar o'da proğram içinde değiştirilme ihtimali vardır. Yukarıda ki örnekte Görüldüğü gibi, fonksiyon her çağırdığımızda sayıyı arttırır. closure fonksiyonlarda iç fonksiyon return edilince hala üst fonksiyonda ki değişken hatırlanır. Şimdi PHP dilindede aynı şeyi yapalım:


$addOne = function($num) {
    return function() { 
        echo $num++; 
    };
};

$f = $addOne(1);

$f();
$f();
$f();

Hata verecek Notice: Undefined variable: num in /var/www/html/b/a.php on line 5 hata vermesinin sebebi PHP ve Javascript proğramlama dili farklıdır. javascript'de bir değişken yalnızca bildirildiği yerde değil, aynı zamanda bu ebeveyn fonksiyonun değişkenlerini iç fonksiyonlardada kullanılabilir olmasıdır.

Böylece PHP fonksiyonun dış değişkene erişimi olmadığı için hata verdi. PHP'deki dış değişkene erişebilmek için use anahtar kelimeyi kullanarak bir kapak (closure) fonksiyonu oluşturmamız gerekiyor.

Şimdi PHP'de daha önce aldığımız hatayı düzeltelim:


$addOne = function($num) {
    return function() use ($num) { 
        echo $num++; 
    };
};

$f = $addOne(1);

$f(); // 1
$f(); // 1
$f(); // 1	

Şimdi kapatma oluşturduk ve hata düzeldi ve $num değişken artık iç fonksiyonda kullanılabilir ancak bir sorun var php'de çıktı bir,bir artma yok, javascript ise üst fonksiyonunda $num değişkeni devamlı hatırlamasıdır. php'de biz bu sorunu Javascript'te olduğu gibi benzer çıktılar elde etmek için reference, & sembolünü kullanarak yapılabilecek değişkenleri geçmemiz gerekir :


$addOne = function($num) {
    return function() use (&$num) {
        echo $num++; 
    };
};

$f = $addOne(1);

$f(); // 1
$f(); // 2
$f(); // 3

Lütfen konu haricinde soru sormayın cevaplanmayacaktır. Yorumunuz onaylandıktan sonra yayınlacaktır.

9714

KATEGORİ
  • HTML
  • CSS
  • PHP
  • JQUERY
  • PHOTOSHOP
  • JavaScript
  • Web Dünyası
  • Linux
  • MİTHRİL FRAMEWORK
POPÜLER MAKALE
  • HTML LİNK(Bağlantı)EKLEME - LİNK VERME
  • HTML YAZI VE RESİM ORTALAMA
  • HTML RESME LİNK VERME
  • HTML DİV ve SPAN NEDİR?
  • HTML FORM OLUŞTURMA
  • HTML KAYAN RESİM VE Marguee KULLANIMI
  • HTML ARKAPLANA MÜZİK EKLEME
  • CSS (BOYUT) GENİŞLİK VE YÜKSEKLİK (Width-Height)
  • HTML RESİM EKLEME
  • PHP ceil()-floor()-round() YUVARLAMA FONKSİYONU
ETİKET
WEBCEBİR © 2013 Tüm hakları saklıdır.