Closure'lar ve 'use'
Coddy'nin PHP Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 2 / 68.
Varsayılan olarak, anonim fonksiyonlar yalnızca kendilerine parametre olarak aktarılan değişkenlere erişebilirler. Peki ya closure'ınızın çevreleyen kapsamdaki bir değişkene erişmesi gerekirse? İşte burada use anahtar kelimesi devreye girer.
use anahtar kelimesi, bir closure'ın (kapanışın) üst kapsamından (parent scope) değişkenleri "yakalamasına" ve bunları fonksiyon içinde kullanmasına olanak tanır:
<?php
$message = "Welcome";
$greeting = function($name) use ($message) {
echo $message . ", " . $name . "!";
};
$greeting("Bob"); // Çıktı: Welcome, Bob!
?>$message değişkeninin fonksiyonun dışında nasıl tanımlandığına dikkat edin; ancak parametre listesinden sonra use ($message) ifadesini ekleyerek, closure bu değişkene erişebilir ve onu kullanabilir. Birden fazla değişkeni virgülle ayırarak yakalayabilirsiniz: use ($var1, $var2).
Bu özellik, closure'ları çok daha güçlü hale getirerek, anonim fonksiyonların esnekliğini korurken aynı zamanda çevreleyen bağlamlarındaki verilerle çalışmalarına olanak tanır.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Görev
Kolayuse anahtar kelimesini kullanarak çevreleyen kapsamdan bir indirim yüzdesini yakalayan anonim bir fonksiyon oluşturun. Fonksiyon, parametre olarak bir fiyat almalı ve indirimi uyguladıktan sonraki nihai fiyatı döndürmelidir.
İki girdi alacaksınız: indirim yüzdesi ve orijinal fiyat. Her iki girdiyi de okuyun, indirim yüzdesini yakalayan bir closure oluşturun, closure'ı fiyat ile çağırın ve indirimden sonraki nihai fiyatı yazdırın.
Girdi formatı: İki satır - ilk satır indirim yüzdesini (bir sayı), ikinci satır orijinal fiyatı (ondalık sayılar içerebilen bir sayı) içerir
Beklenen çıktı: İndirim uygulandıktan sonraki nihai fiyat
Kopya kağıdı
use anahtar kelimesi, closure'ların değişkenleri üst kapsamlarından yakalamasına olanak tanır:
<?php
$message = "Welcome";
$greeting = function($name) use ($message) {
echo $message . ", " . $name . "!";
};
$greeting("Bob"); // Çıktı: Welcome, Bob!
?>Virgülle ayırarak birden fazla değişkeni yakalayabilirsiniz: use ($var1, $var2).
Kendin dene
<?php
// Girdileri oku
$discount = floatval(fgets(STDIN));
$price = floatval(fgets(STDIN));
// YAPILACAK: 'use' kullanarak indirim yüzdesini yakalayan anonim bir fonksiyon oluşturun
// Fonksiyon bir fiyat parametresi almalı ve indirimden sonraki nihai fiyatı döndürmelidir
// YAPILACAK: Closure'ı fiyat ile çağırın ve sonucu saklayın
// Nihai fiyatı yazdırın
echo $finalPrice;
?>Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1İleri Seviye Fonksiyonlar
Anonim FonksiyonlarClosure'lar ve 'use'Ok Fonksiyonları (Arrow Functions)Geri Çağırma (Callback) Fonksiyonları'call_user_func' KullanımıDeğişken FonksiyonlarReferans ile Değer AktarımıÖz Yinelemeli (Recursive) FonksiyonlarÖzet: Fonksiyon Karması4Çok Boyutlu Diziler
2 Boyutlu Dizi Oluşturma2 Boyutlu Dizi Elemanlarına Erişme2 Boyutlu Dizi Elemanlarını Değiştirmeİç İçe Döngülerle Yineleme2 Boyutlu İlişkisel DizilerÖzet: Basit Izgara Egzersizi2İleri Düzey Dizi İşlemleri
'array_push' ile Ekleme'array_pop' ile Silme'array_unshift' ile Ekleme'array_shift' ile Silmeİndisli Dizileri Birleştirmeİlişkisel Dizileri Birleştirme'array_slice' ile Kesit Alma'in_array' ile Değer Kontrolü'array_search' ile Anahtar AramaÖzet: Çalma Listesi Alıştırması3Dizileri Sıralama
İndisli Dizileri Artan Sırada Sıralamaİndisli Dizileri Azalan Sırada Sıralamaİlişkisel Dizileri Değere Göre Sıralamaİlişkisel Dizileri Anahtara Göre SıralamaDoğal Sıralama (Natural Order)'usort' ile Özel SıralamaÖzet: Liderlik Tablosu Sıralama