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 iç 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
- HTML
- CSS
- PHP
- JQUERY
- PHOTOSHOP
- JavaScript
- Web Dünyası
- Linux
- MİTHRİL FRAMEWORK
- Laravel
- Git
- React
- HTML LİNK(Bağlantı)EKLEME - LİNK VERME
- HTML YAZI VE RESİM ORTALAMA
- HTML RESME LİNK VERME
- HTML FORM OLUŞTURMA
- CSS YATAY MENÜ YAPIMI
- HTML RESİM EKLEME
- CSS (BOYUT) GENİŞLİK VE YÜKSEKLİK (Width-Height)
- HTML DİV ve SPAN NEDİR?
- HTML ARKAPLANA MÜZİK EKLEME
- KALİTE KAYBETMEDEN RESİMLERİ BÜYÜTME